<?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>229229</bug_id>
          
          <creation_ts>2021-08-17 23:31:57 -0700</creation_ts>
          <short_desc>[JSC] Polymorphic PutByVal</short_desc>
          <delta_ts>2021-08-26 22:48:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pvollan</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1785056</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-17 23:31:57 -0700</bug_when>
    <thetext>[JSC] Polymorphic PutByVal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785057</commentid>
    <comment_count>1</comment_count>
      <attachid>435749</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-17 23:32:33 -0700</bug_when>
    <thetext>Created attachment 435749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785192</commentid>
    <comment_count>2</comment_count>
      <attachid>435789</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-18 12:26:32 -0700</bug_when>
    <thetext>Created attachment 435789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785241</commentid>
    <comment_count>3</comment_count>
      <attachid>435804</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-18 15:15:38 -0700</bug_when>
    <thetext>Created attachment 435804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785271</commentid>
    <comment_count>4</comment_count>
      <attachid>435816</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-18 16:33:38 -0700</bug_when>
    <thetext>Created attachment 435816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785327</commentid>
    <comment_count>5</comment_count>
      <attachid>435827</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-18 19:27:50 -0700</bug_when>
    <thetext>Created attachment 435827
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785329</commentid>
    <comment_count>6</comment_count>
      <attachid>435828</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-18 19:31:38 -0700</bug_when>
    <thetext>Created attachment 435828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785385</commentid>
    <comment_count>7</comment_count>
      <attachid>435846</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-18 22:54:42 -0700</bug_when>
    <thetext>Created attachment 435846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785414</commentid>
    <comment_count>8</comment_count>
      <attachid>435856</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-19 01:48:42 -0700</bug_when>
    <thetext>Created attachment 435856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786070</commentid>
    <comment_count>9</comment_count>
      <attachid>436051</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-20 18:15:41 -0700</bug_when>
    <thetext>Created attachment 436051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786123</commentid>
    <comment_count>10</comment_count>
      <attachid>436069</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-21 04:59:46 -0700</bug_when>
    <thetext>Created attachment 436069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786124</commentid>
    <comment_count>11</comment_count>
      <attachid>436070</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-21 05:09:49 -0700</bug_when>
    <thetext>Created attachment 436070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786127</commentid>
    <comment_count>12</comment_count>
      <attachid>436071</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-21 05:15:48 -0700</bug_when>
    <thetext>Created attachment 436071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786330</commentid>
    <comment_count>13</comment_count>
      <attachid>436154</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 00:14:02 -0700</bug_when>
    <thetext>Created attachment 436154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786339</commentid>
    <comment_count>14</comment_count>
      <attachid>436158</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 01:04:17 -0700</bug_when>
    <thetext>Created attachment 436158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786347</commentid>
    <comment_count>15</comment_count>
      <attachid>436163</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 01:33:02 -0700</bug_when>
    <thetext>Created attachment 436163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786369</commentid>
    <comment_count>16</comment_count>
      <attachid>436174</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 02:57:55 -0700</bug_when>
    <thetext>Created attachment 436174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786371</commentid>
    <comment_count>17</comment_count>
      <attachid>436176</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 03:09:42 -0700</bug_when>
    <thetext>Created attachment 436176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786373</commentid>
    <comment_count>18</comment_count>
      <attachid>436177</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 03:19:12 -0700</bug_when>
    <thetext>Created attachment 436177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786656</commentid>
    <comment_count>19</comment_count>
      <attachid>436260</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-23 20:02:26 -0700</bug_when>
    <thetext>Created attachment 436260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786756</commentid>
    <comment_count>20</comment_count>
      <attachid>436294</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-24 09:18:20 -0700</bug_when>
    <thetext>Created attachment 436294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786765</commentid>
    <comment_count>21</comment_count>
      <attachid>436296</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-24 09:40:59 -0700</bug_when>
    <thetext>Created attachment 436296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786959</commentid>
    <comment_count>22</comment_count>
      <attachid>436337</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-24 15:00:51 -0700</bug_when>
    <thetext>Created attachment 436337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786966</commentid>
    <comment_count>23</comment_count>
      <attachid>436338</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-24 15:13:39 -0700</bug_when>
    <thetext>Created attachment 436338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786972</commentid>
    <comment_count>24</comment_count>
      <attachid>436341</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-24 15:25:01 -0700</bug_when>
    <thetext>Created attachment 436341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787095</commentid>
    <comment_count>25</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-24 23:32:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/82327133&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787302</commentid>
    <comment_count>26</comment_count>
      <attachid>436423</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-25 14:05:33 -0700</bug_when>
    <thetext>Created attachment 436423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787331</commentid>
    <comment_count>27</comment_count>
      <attachid>436429</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-25 14:47:44 -0700</bug_when>
    <thetext>Created attachment 436429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787427</commentid>
    <comment_count>28</comment_count>
      <attachid>436429</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 19:45:15 -0700</bug_when>
    <thetext>Comment on attachment 436429
Patch

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

Nice. r=me with a few comments.

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1068
&gt; +        if (stubInfo.m_arrayProfileGPR != InvalidGPRReg)

assert it&apos;s invalidGPR?

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1170
&gt; +        if (stubInfo.m_arrayProfileGPR != InvalidGPRReg)
&gt; +            allocator.lock(stubInfo.m_arrayProfileGPR);

assert it&apos;s invalidGPR?

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1257
&gt; +        if (stubInfo.m_arrayProfileGPR != InvalidGPRReg)
&gt; +            allocator.lock(stubInfo.m_arrayProfileGPR);

assert it&apos;s invalidGPR?

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1492
&gt; +                failAndIgnore.append(jit.branchIfNaN(state.scratchFPR));

Why ignore? Shouldn&apos;t this be a case to repatch, since we&apos;re not storing int32? Or maybe we expect this particular array to get transitioned into something more general, so we can kind of ignore the likelihood of this?

I guess I&apos;m just worried about the case where we see a lot of non numbers in practice? Like, say we started off with profiling a single number case, but then we ended up with many things that are never numbers, we&apos;ll never end up repatching. Not sure what the right approach is, but it&apos;s worth considering if we should do something else here.

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1505
&gt; +                failAndIgnore.append(jit.branchIfNotInt32(valueRegs));

ditto regarding repatching vs not repatching.

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1573
&gt; +            state.failAndIgnore.append(jit.branchIfNotInt32(valueRegs));

ditto about repatching or ignoring.

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1582
&gt; +            state.failAndIgnore.append(jit.branchIfNotNumber(valueRegs.payloadGPR()));

ditto

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1594
&gt; +        state.failAndRepatch.append(jit.branch32(CCallHelpers::AboveOrEqual, propertyGPR, scratchGPR));

we fail and repatch here, but ignore the case for normal arrays when we go OOB past vector length. Is that intentional?

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:2434
&gt; +        if (stubInfo.m_arrayProfileGPR != InvalidGPRReg)
&gt; +            allocator.lock(stubInfo.m_arrayProfileGPR);

Assert invalidGPR?

&gt; Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp:145
&gt; +    if (stubInfo.m_arrayProfileGPR != InvalidGPRReg)
&gt; +        allocator.lock(stubInfo.m_arrayProfileGPR);

assert is invalidGPR?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6475
&gt; +                    tryCompileAsPutByOffset = true;

let&apos;s rename this to &quot;compiledAsPutPrivateNameById&quot;

&gt; Source/JavaScriptCore/jit/Repatch.cpp:899
&gt; +        GCSafeConcurrentJSLocker locker(codeBlock-&gt;m_lock, globalObject-&gt;vm().heap);

small nit: Maybe grab lock below the if and switches, since some cases return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787450</commentid>
    <comment_count>29</comment_count>
      <attachid>436464</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-25 21:26:37 -0700</bug_when>
    <thetext>Created attachment 436464
Patch

Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787476</commentid>
    <comment_count>30</comment_count>
      <attachid>436429</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-25 22:58:38 -0700</bug_when>
    <thetext>Comment on attachment 436429
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1068
&gt;&gt; +        if (stubInfo.m_arrayProfileGPR != InvalidGPRReg)
&gt; 
&gt; assert it&apos;s invalidGPR?

Changed.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1170
&gt;&gt; +            allocator.lock(stubInfo.m_arrayProfileGPR);
&gt; 
&gt; assert it&apos;s invalidGPR?

Changed.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1257
&gt;&gt; +            allocator.lock(stubInfo.m_arrayProfileGPR);
&gt; 
&gt; assert it&apos;s invalidGPR?

Changed.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1492
&gt;&gt; +                failAndIgnore.append(jit.branchIfNaN(state.scratchFPR));
&gt; 
&gt; Why ignore? Shouldn&apos;t this be a case to repatch, since we&apos;re not storing int32? Or maybe we expect this particular array to get transitioned into something more general, so we can kind of ignore the likelihood of this?
&gt; 
&gt; I guess I&apos;m just worried about the case where we see a lot of non numbers in practice? Like, say we started off with profiling a single number case, but then we ended up with many things that are never numbers, we&apos;ll never end up repatching. Not sure what the right approach is, but it&apos;s worth considering if we should do something else here.

Changed to failAndRepatch.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1505
&gt;&gt; +                failAndIgnore.append(jit.branchIfNotInt32(valueRegs));
&gt; 
&gt; ditto regarding repatching vs not repatching.

Changed to failAndRepatch.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1573
&gt;&gt; +            state.failAndIgnore.append(jit.branchIfNotInt32(valueRegs));
&gt; 
&gt; ditto about repatching or ignoring.

Changed to failAndRepatch.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1582
&gt;&gt; +            state.failAndIgnore.append(jit.branchIfNotNumber(valueRegs.payloadGPR()));
&gt; 
&gt; ditto

Changed to failAndRepatch.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1594
&gt;&gt; +        state.failAndRepatch.append(jit.branch32(CCallHelpers::AboveOrEqual, propertyGPR, scratchGPR));
&gt; 
&gt; we fail and repatch here, but ignore the case for normal arrays when we go OOB past vector length. Is that intentional?

Discussed with Saam at Slack. We will continue using failAndRepatch since OOB TypedArray access case should soon get the slow path.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:2434
&gt;&gt; +            allocator.lock(stubInfo.m_arrayProfileGPR);
&gt; 
&gt; Assert invalidGPR?

Changed.

&gt;&gt; Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp:145
&gt;&gt; +        allocator.lock(stubInfo.m_arrayProfileGPR);
&gt; 
&gt; assert is invalidGPR?

Changed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6475
&gt;&gt; +                    tryCompileAsPutByOffset = true;
&gt; 
&gt; let&apos;s rename this to &quot;compiledAsPutPrivateNameById&quot;

Changed.

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:899
&gt;&gt; +        GCSafeConcurrentJSLocker locker(codeBlock-&gt;m_lock, globalObject-&gt;vm().heap);
&gt; 
&gt; small nit: Maybe grab lock below the if and switches, since some cases return?

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787494</commentid>
    <comment_count>31</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-26 00:39:11 -0700</bug_when>
    <thetext>Committed r281615 (240971@main): &lt;https://commits.webkit.org/240971@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787958</commentid>
    <comment_count>32</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-26 22:48:27 -0700</bug_when>
    <thetext>*** Bug 203866 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435749</attachid>
            <date>2021-08-17 23:32:33 -0700</date>
            <delta_ts>2021-08-18 12:26:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210817233233.patch</filename>
            <type>text/plain</type>
            <size>268689</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li4yOGU2MTVkMTliNWNhMzZm
ZTdhY2NlYjgxNjJmMDc2NzAwYWY3NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODEgQEAKKzIwMjEtMDgtMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
dHJ5UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRyeURpcmVjdFB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6
CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAg
ICAgKEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVBcnJheVB1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZUluQnkpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5
SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5oOgorCiAyMDIxLTA4LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBFbnN1cmUgdGhhdCB1bnVzZWQgTExJbnQgb3Bjb2RlcyBhcmUgbm90IGluYWR2ZXJ0ZW50
bHkgdXNlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQxY2IzMjZiZTcwNWQ3
MzM5MWQxNWVmNDdlNzRhOTk0ZmMxODk4Yy4uZWIwYzFjODRiYTBmZDY3MDRmM2YxOGNiZDgzZmZj
ODU5MGI0M2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2NCw5ICs0NjQs
OSBAQAogCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc1RTFDMjFF
RjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBMDE0Q0E3
RENEMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
OTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUExNENB
N0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVj
dHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTNCNEFBMThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5
M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8q
IFB1dEJ5VmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2
MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tl
ZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzMDNBMUQ0
MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxB
dHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTI4NjcsMTEgKzI4NjcsMTEgQEAKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8q
IENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxM
aW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdE
QzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHZXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHZXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFN0
YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5OTE0Q0E3REMxMDA4
NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHV0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
MzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1
dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE3MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHV0QnlWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdFJhY2VLZXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQg
LyogVmlzaXRSYWNlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0
UmFjZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFCQTFCNDg3QTc3
MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtODY5OCwxMCArODY5OCwxMCBAQAogCQkJCTBGRDNFNDA4MUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGMTVDRDIwMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwICovLAogCQkJCTBGMTVDRDIxMUJBNUY5ODYwMDMxRkZE
MyAvKiBQdXRCeUlkRmxhZ3MuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyog
UHV0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJ
ZFZhcmlhbnQuY3BwICovLAotCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlk
VmFyaWFudC5oICovLAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1
cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmgg
Ki8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8s
CisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovLAogCQkJ
CTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJMEY0NEE3QUQy
MEJGNjg1RjAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuY3BwICovLAogCQkJCTBGNDRBN0FB
MjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8sCkBAIC0xMDUxMCw4ICsx
MDUxMCw4IEBACiAJCQkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRG
bGFncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzQjRBQTE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBD
RDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0NzAyZGI2MDFj
YzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uNzA3N2VmOWFlMzExNzZmNjM4NWViZTM0Y2Ni
MzFhNTA1YzE5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjY5LDggKzI2
OSw4IEBAIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9Qcm9wZXJ0eUNv
bmRpdGlvbi5jcHAKIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCiBieXRlY29kZS9Q
dXRCeUlkRmxhZ3MuY3BwCi1ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAotYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCitieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKK2J5dGVjb2RlL1B1dEJ5
VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1
Y2VXaGl0ZXNwYWNlLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
djcuaAppbmRleCBkZjg4Mzg2YTgzMjNkODY5MTJjZmU1MzUzMWUzYTgyZGZiNDRlYjhlLi45MTE3
YmI4NDRjNjA3ZWI1ZTUyMzNmYjM4YTQ1MjI0YjQ2NzM2NDc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaApAQCAtMTAw
MSw5ICsxMDAxLDggQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk12NyA6IHB1YmxpYyBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogICAgICAgICBtX2Fzc2VtYmxlci52bW92KGRl
c3QxLCBkZXN0Miwgc3JjKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBtb3ZlSW50c1RvRG91Ymxl
KFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCwgRlBS
ZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQg
c3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBz
cmMxLCBzcmMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCmluZGV4IDE0NDVjNzkxYjI4Y2VmNWRmYzE1NmMz
MTI0YzZhNGUyMjIxYWMxYTQuLjc0ZDEyNzYyNWE3N2I1MTE2OWJhZGY5YWQzNWM3ZTg1YjM1Mzlh
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaApAQCAtMjA3Miw5ICsyMDcyLDggQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJN
SVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KIAotICAgIHZvaWQg
bW92ZUludHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdp
c3RlcklEIGRlc3QsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHZvaWQgbW92ZUludHNUb0Rv
dWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLnZtb3YoZGVzdCwgc3JjMSwgc3JjMik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKaW5kZXggOGQwMjJlM2I4
MjVmNThkMmVmNDg4MjFiMWMyYTk0MjU2OTFkMWI0OS4uYTY2OTk1OTcwNTUwYTlhYjUxY2QyNmQ0
OTE5NTY2OGYzYjBjOTRhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaApAQCAtMTgzLDE0ICsxODMsNiBAQCBjbGFzcyBNYWNy
b0Fzc2VtYmxlclg4NiA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiB7CiAgICAgICAg
IG1vdmVGbG9hdFRvMzIoc3JjLCBkZXN0MSk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlSW50c1Rv
RG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVz
dCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCi0gICAgewotICAgICAgICBtb3ZlMzJUb0Zsb2F0KHNy
YzEsIGRlc3QpOwotICAgICAgICBtb3ZlMzJUb0Zsb2F0KHNyYzIsIHNjcmF0Y2gpOwotICAgICAg
ICBsc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7Ci0gICAgICAgIG9yUGFj
a2VkKHNjcmF0Y2gsIGRlc3QpOwotICAgIH0KLQogICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBkZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pbShpbW0ubV92YWx1ZSwgZGVzdC5tX3B0
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKaW5k
ZXggZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uYjA0NTRkMTgwMzNh
MDMzNTg5MDVjOWRkZmI4N2UxMTM1NDQ3YzFkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVmPEFjY2Vzc0Nh
c2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUg
dHlwZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmlu
Z0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3Vi
bGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3Ry
dWN0dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29uc3QKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAgYm9vbCBBY2Nl
c3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBib29sIEFjY2Vz
c0Nhc2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEluZGV4
ZWREb3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVu
ZGVudENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1w
ZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTY5LDYg
KzY0NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZlY3RvcjxKU0Nl
bGwqPiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6
CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5S
ZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRp
Z3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CiAKICAg
ICBjYXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBp
c0VtcHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJh
c2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpAQCAtMTIyNywx
NiArMTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAg
ICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAg
ICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3Jh
dGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhz
Y3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFu
Y2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShz
Y3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3Zl
KHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsx
MzYzLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAg
ICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAg
ICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0
Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRl
LnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERv
dWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6
VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBp
c0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkp
OwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFz
ZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQp
LCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAg
IGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAg
ICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsK
ICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRh
Z0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4NywyNTQgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAg
ICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3Jl
LmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJl
c2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3Jh
Z2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlz
IGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRo
ZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3Rh
dGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHlt
b3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlP
bldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
YWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdz
KTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAg
ICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworI2VuZGlmCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3Rh
dGUgcHJlc2VydmVkU3RhdGU7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWls
QW5kSWdub3JlOworICAgICAgICBhdXRvIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzID0gWyZdIHsK
KyAgICAgICAgICAgIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNr
U3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgICAgIH07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBzdG9yZVJlc3VsdDsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1
c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAg
ICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7
CisKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVs
cGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSkpOworCisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAg
ICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRl
eGluZ1R5cGUgZXhwZWN0ZWRTaGFwZTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVj
dGVkU2hhcGUgPSBJbnQzMlNoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFw
ZSA9IERvdWJsZVNoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUg
PSBDb250aWd1b3VzU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZhbGxU
aHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpKTsKKworICAg
ICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91Ymxl
U3RvcmU6IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBS
ICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgICAgIGF1dG8gbm90SW50ID0gaml0LmJy
YW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7Cisg
ICAgICAgICAgICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAg
bm90SW50LmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IDMyYml0CisgICAg
ICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsK
KyAgICAgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVl
KHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAg
ICAgICAgIC8vIFdyaXRlQmFycmllciBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGVtYmVkZGVyIHNp
ZGUuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQorICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRk
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgICAgICBqaXQuYWRk
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LnN1
YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBp
c0VtcHR5LmxpbmsoJmppdCk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCgpKSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAgICAgICAgICAgIC8vIGVt
aXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgICAgICAg
ICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eUdQUiwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0
KTsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVy
cygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25v
cmUubGluaygmaml0KTsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgICAgICAgICAgc3RhdGUuZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZp
YVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhl
IHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKworICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9UeXBlZEFycmF5VHlwZShtX3R5cGUpOworCisg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CisKKyAgICAg
ICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSkpOworCisg
ICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRl
LmZhaWxBbmRSZXBhdGNoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKSk7CisgICAgICAgIGlmIChpc0ludCh0eXBl
KSkKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2
YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0
eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IElu
dmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElm
Tm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
IGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZq
aXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQo
aml0LmJyYW5jaElmTm90TnVtYmVyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdzLnBheWxv
YWRHUFIoKSk7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZWxzZQorICAgICAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKGppdC5icmFuY2gzMihBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9E
b3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5z
Y3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAgICAgcmVhZHkubGluaygmaml0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VS
ZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5m
by5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2Ny
YXRjaEdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNl
cnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFu
ZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAg
ICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRT
aXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0
eXBlKSk7CisgICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGF1dG8gdG9vQmlnID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW4sIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAg
ICBqaXQueG9yMzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBjbGFtcGVkID0gaml0Lmp1bXAoKTsKKyAgICAgICAg
ICAgICAgICB0b29CaWcubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91
bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmU4KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlMTYodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5k
ZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNUd28pKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAg
ICBqaXQuc3RvcmUzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJ
bmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAg
ICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NF
UlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3Jh
dGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgeworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252
ZXJ0RG91YmxlVG9GbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1l
c0ZvdXIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODogewor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAorICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTgzLDYgKzI1MjIsMTkgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKICAgICBjYXNlIENoZWNrUHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NFN0b3JlOgogICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2Vu
ZXJhdGVXaXRoR3VhcmQoKSwgc2luY2UgdGhlIGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAg
IC8vIGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVy
YXRlKCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNpbmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBn
dWFyZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3MuCkBAIC0yMTk2LDIyICsyNTQ4LDMxIEBAIFR5cGVk
QXJyYXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlwZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlKQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAg
ICAgICByZXR1cm4gVHlwZUludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJu
IFR5cGVVaW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJl
dHVybiBUeXBlVWludDhDbGFtcGVkOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlSW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVp
bnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjg0LDYgKzI2NDUsMTkgQEAg
Ym9vbCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJlZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0
IEFjY2Vzc0Nhc2UmIHJocykKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3Jl
OgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJp
YzoKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuaAppbmRleCA0MTljOTljOTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZk
OWJlLi4xODY0NGFkNTEwZjgwYmJkOTc1MWY4MzY2NzBmZjkwYTkzMTA4NDMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAg
QEAgY2xhc3MgQWNjZXNzQ2FzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3ND
YXNlPiB7CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmlu
Z0xvYWQsCisgICAgICAgIEluZGV4ZWRJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkRG91Ymxl
U3RvcmUsCisgICAgICAgIEluZGV4ZWRDb250aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6
IHVpbnQ4X3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lD
U3RhdHVzTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAu
aAppbmRleCBmYTBhNmQ1MjNiN2FkMGRmODgyMTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMz
ZDAyNTk2YmY2ZWE4ZmY5YThhNzJiNGRjMmExZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxs
TGlua1N0YXR1czsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3Mg
SW5CeVN0YXR1czsKLWNsYXNzIFB1dEJ5SWRTdGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNs
YXNzIERlbGV0ZUJ5U3RhdHVzOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlW
YWxJbmZvOwpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5r
U3RhdHVzKiBjYWxsU3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0
dXMgeyBudWxscHRyIH07CiAgICAgSW5CeVN0YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0g
ICAgUHV0QnlJZFN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVz
KiBwdXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1
cyB7IG51bGxwdHIgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMz
YWRkMWZmZTY2Mjc1ZDkxMTQuLjQ3MTM1MTlkYmE5NGIyMTRmY2U0NTcxMGQ3NmIyMTIzYWZkNzBi
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcApAQCAtMTAyMiw2ICsxMDIyLDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
U3RyaW5nTG9hZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRl
eGVkSW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAg
IG91dC5wcmludCgiSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQu
cHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFj
OTBjMWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3Rh
dHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVz
OjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1Q
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAg
ICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29t
cHV0ZUZyb21MTEludGAgaW4gYW55IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAg
Ly8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVy
ZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMg
b3BlcmF0aW9uIG9uIExMSW50LgotICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJp
dmF0ZU5hbWU+KCkpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxl
ZEJsb2NrKTsKLQotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRT
dHJ1Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1
Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAg
aWYgKCFuZXdTdHJ1Y3R1cmVJRCkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0
cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0g
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVj
b2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0
cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0
dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJM
RShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
LSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlk
RXhpdCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1
dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywg
dWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURf
UEFSQU0obWFwKTsKLSAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJl
dHVybiBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywg
c3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHVi
SW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVk
QmxvY2stPnZtKCksIHN0dWJJbmZvKTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNo
IChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0g
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxl
ZCBmb3Igc29tZSByZWFzb24uCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2U6IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAg
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBs
ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+
YXQoaSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAg
ICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vz
c0Nhc2U6OlJlcGxhY2U6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2
YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlv
bjogewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAg
ICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBs
ZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpj
YWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2Fs
bEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVy
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9m
ZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAg
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2Nr
LCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0
U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsK
LSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEg
PSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRl
Y29kZUluZGV4KTsKLSAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShi
YXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0
KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNv
bnRleHQtPmdldChjb2RlT3JpZ2luKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBb
Jl0gKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAg
ICAgICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwg
dWlkLCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAg
ICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5zbG93VmVyc2lvbigpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0
YXR1cy5zdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxl
c3MocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRT
dGF0dXMpCi0gICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1h
cCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0g
U2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgp
ICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAg
IGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZh
bGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUg
bW9kZQotICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBw
cml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAg
IC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKLSAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgotICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBo
YXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAg
ICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVz
ZSBpdCBtZWFucyB3ZSBhcmUKLSAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGlu
c3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBw
YXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAg
IGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBp
cyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhp
cyBpcyByZWFsbHkKLSAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBj
aGVja3MuCi0gICAgCi0gICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBk
aWN0aW9uYXJpZXMuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsK
LSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAot
ICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1
cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNl
dCk7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAKLSAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFu
dCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAg
ICAgaWYgKCFkaWRBcHBlbmQpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2Fs
bHMoKSBjb25zdAotewotICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Ns
b3dQYXRoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0
YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUo
Vk0mIHZtKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KSB7Ci0gICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0
dXM6Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5t
X3N0YXRlID09IE5vSW5mb3JtYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRv
IG1lcmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93
UGF0aCk7Ci0gICAgfTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5v
SW5mb3JtYXRpb246Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNp
bXBsZSkKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewot
ICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2Fz
ZSBNYWtlc0NhbGxzOgotICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9
IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92
YXJpYW50cywgc2V0KTsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJp
YW50cykKLSAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnko
KTsKLSAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0lu
Zm9ybWF0aW9uOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRp
b246Ci0gICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxp
c3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
IGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnBy
aW50KCIoTWFrZXNDYWxscykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBj
YWU2MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1
cy5oIgotI2luY2x1ZGUgIkV4aXRGbGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNp
bmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQu
aCIKLSNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENvZGVCbG9jazsKLWNsYXNzIFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBT
dHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1
cyBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51
bSBTdGF0ZSB7Ci0gICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1h
dGlvbi4KLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMg
YSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8v
IEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1Bh
dGgsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMu
Ci0gICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQot
ICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwg
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAg
fQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZv
cm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1h
cnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0g
ICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICAKLSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAg
ICAgICA6IG1fc3RhdGUoU2ltcGxlKQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQo
dmFyaWFudCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAg
c3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZh
dGVGaWVsZFB1dEtpbmQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElD
U3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOwotI2VuZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUg
PT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5
SWRTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3Rv
cjxQdXRCeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50
czsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQ
dXRCeUlkU3RhdHVzJik7Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2
YXRlOgotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSAgICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0
QnlJZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUg
bV9zdGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0
ZDY0NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2Fs
bExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKLSAgICA6IFB1dEJ5SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwot
fQotCi1QdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRC
eUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29u
ZGl0aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVl
PENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnRyYW5zaXRpb24oCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUo
KSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1f
a2luZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQot
Ym9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0
ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25z
dAotewotICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAg
ICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90
aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFy
aWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAg
ICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAg
ICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBp
ZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0
aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAg
IGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQg
PSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYg
KG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKSB7Ci0gICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2Fs
bExpbmtTdGF0dXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5t
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25T
ZXQ7Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1f
Y29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFs
aWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0
aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCi0gICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIu
bV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJn
ZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQot
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9r
aW5kID09IFRyYW5zaXRpb24pOwotICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNl
KTsKLSAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJU
KCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxs
b2NhdGVzU3RvcmFnZSgpKTsKLSAgICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpOwotICAgIAotICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hl
biB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAot
ICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdh
cyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdl
IG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBv
bHltb3JwaGljLgotICAgIAotICAgIGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlT
dHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUu
bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBt
X25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQg
UHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBs
YXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3Ry
dWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
dm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYg
IW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAg
ICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiB0byAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAot
ICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwg
Il0iKTsKLSAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAg
ICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91
dC5wcmludCgiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhNzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2Fi
MjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwot
Ci1jbGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZW51bSBLaW5kIHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNl
LAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAg
IFB1dEJ5SWRWYXJpYW50KCkKLSAgICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1f
b2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJp
YW50Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFu
dCYpOwotCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0
cmFuc2l0aW9uKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4pOwotICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
IT0gTm90U2V0OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQo
KTsgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0g
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsK
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1
Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVj
ZXNzYXJ5KCk7Ci0KLSAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29s
IHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OwotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRv
bid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYg
d2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRy
aW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8v
IFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVy
dHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlu
a1N0YXR1cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7
Ci0gICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJv
b2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
LSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90
aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVy
LnN0cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7
Ci0gICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0g
ICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1
Y3R1cmUgeyBudWxscHRyIH07Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25k
aXRpb25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5r
U3RhdHVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTJiYjA0NjgxNGMyNmVj
YzQ4YWNkMDk3YWUxZjYyMGFmMTI5ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDUwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdl
dFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRl
ICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0
QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorewor
ICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9
CisKK3ZvaWQgUHV0QnlTdGF0dXM6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNo
cmlua1RvRml0KCk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxM
SW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQoreworICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBp
bnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpOworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgLy8gV2Ug
YXJlIG5vdCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1
dF9wcml2YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlm
IHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAg
ICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAg
ICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgfQorCisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci0+aW1w
bCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVj
dHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisKKyAgICBTdHJ1Y3R1cmVJ
RCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CisgICAgaWYgKCFu
ZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgc3Ry
dWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAKKyAg
ICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICghKGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgK
KyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVj
dHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRG
bGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0
YSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9j
ayk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOworICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGlkRXhp
dCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAorICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29k
ZUluZGV4KSkuc3R1YkluZm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0
dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9t
TExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BBUkFNKG1hcCk7CisgICAg
VU5VU0VEX1BBUkFNKGRpZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRh
KTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5m
byhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
K3sKKyAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIGJhc2Vs
aW5lQmxvY2ssIHN0dWJJbmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRT
aXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOworfQor
CitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhp
dFNpdGVEYXRhKQoreworICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1
YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOworICAgIGlmICgh
aXNJbmxpbmVhYmxlKHN1bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoc3VtbWFy
eSk7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKKyAgICBjYXNl
IENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0
ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgCisgICAgY2Fz
ZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQorICAgICAgICAgICAgc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4g
UHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBs
aXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAgICAgIFB1dEJ5U3RhdHVzIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAg
aWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MudXNl
c1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChh
Y2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
SlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50
ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246
IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBhY2Nlc3MubmV3U3Ry
dWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlv
blNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1
cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0g
UHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vzcy5pZGVudGlmaWVyKCksIGFjY2Vzcy5zdHJ1
Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKKyAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0
dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRp
dGlvblNldCgpLCBhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBs
ZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7
CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlu
a1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZv
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vzcy5pZGVudGlmaWVyKCks
IHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5j
b25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayog
YmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRT
dGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7
CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9j
aywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6
IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQo
Y29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQ
dXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgIFB1dEJ5U3Rh
dHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAgIGJhc2VsaW5l
UmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVz
dWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZy
b21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgICAKKyAgICAg
ICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0
OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICAgICAgbG9ja2Vy
LCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRT
aXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIGJs
ZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVG
b3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNh
bGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmll
bGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCisgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgIGlmIChzZXQuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAgICAKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2Jq
ZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAor
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAg
ICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBo
YXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRg
IGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZp
bmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAorICAg
ICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIGlm
IChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVw
bGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxs
VmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwg
Y3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KKyAgICAg
ICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4
ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAgICAgICAgICAgLy8gZ29p
bmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQg
ZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2
ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGlu
Z3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0
YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJp
YW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ug
d2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0CisgICAgICAgIC8vIHNo
b3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMg
d2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJp
dmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJv
dyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAgICAgICBpZiAocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUg
ZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQor
ICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKyAgICAK
KyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4K
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHN0cnVj
dHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4g
Z2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJv
cGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
c09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgp
OworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmll
bGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIFdlIG9ubHkg
b3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0
aW9uIGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAg
ICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF0
cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgp
OworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAgICAgICAg
Ym9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeVZhcmlhbnQ6OnRyYW5z
aXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9m
ZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0LnNocmlua1Rv
Rml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIFB1dEJ5U3RhdHVz
OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Zhcmlh
bnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxz
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAor
eworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFr
ZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0QnlTdGF0dXM6OnNpbmds
ZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJZGVudGlmaWVyRm9ySUNT
dGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlh
bnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUo
UHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVN0
YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAo
dmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkK
K3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAg
ICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6Om1lcmdlKGNv
bnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0lu
Zm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBtZXJnZVNsb3cgPSBb
Jl0gKCkgeworICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3Ro
ZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKKyAgICB9Owor
ICAgIAorICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAg
ICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICAg
ICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBQdXRC
eVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgeworICAgICAgICAgICAgaWYgKCFh
cHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7
CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAg
ICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJl
dHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7CisgICAg
Zm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50
LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworICAgIGlmIChtX3ZhcmlhbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK3ZvaWQg
UHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgi
KE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBT
aW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAg
ICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzJhMWM3M2M4ZjQxY2ExOTJlNThk
NGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhpdEZsYWcuaCIKKyNpbmNs
dWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKKyNp
bmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFZNOworY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKK2Ns
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsK
KworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNv
IHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3JtYXRpb24sCisgICAgICAg
IC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAg
U2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgor
ICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0
aHMgdGhhdCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzCisgICAgfTsKKyAgICAKKyAg
ICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAg
ICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5v
SW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFr
ZXNDYWxscyk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0dWJJbmZv
U3VtbWFyeSBzdW1tYXJ5KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAg
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgorICAgICAgICAgICAgbV9z
dGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
U3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpN
YWtlc0NhbGxzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xv
d1BhdGg6CisgICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRN
YWtlc0NhbGxzOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAgICAgICAgbV92YXJpYW50
cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBj
b21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZs
YWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeVN0YXR1
cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgQ2FjaGVh
YmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAg
CisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJs
b2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiwgQ29k
ZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21w
dXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNl
bGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4pOworI2VuZGlmCisgICAg
CisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgCisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0
aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2lt
cGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9
PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQorICAgIGJvb2wgbWFr
ZXNDYWxscygpIGNvbnN0OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Cisg
ICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5z
aXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBj
b25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBhdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CisgICAgY29u
c3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5nbGVJZGVudGlmaWVyKCkg
Y29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlTdGF0dXMmKTsK
KyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisjaWYgRU5BQkxF
KEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMg
Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgdm9pZCBzaHJpbmtU
b0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFu
dCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDYz
ODRhYjFjZWViYWYyMThhNDA5OTYzMzI0NzFlM2YxMDBhNzZkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKQEAgLTAsMCAr
MSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisKKyNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZh
cmlhbnQmIG90aGVyKQorICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sK
KyAgICAqdGhpcyA9IG90aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIu
bV9raW5kOworICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAg
bV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNl
dCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7
CisgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7
CisgICAgZWxzZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lk
ZW50aWZpZXIgPSBvdGhlci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQ
dXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOwor
ICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFy
aWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRy
YW5zaXRpb247CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAg
IHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25k
aXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRl
cihDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZp
ZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5r
U3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworU3RydWN0dXJlKiBQdXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBj
b25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUg
IT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nh
cnkoKQoreworICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxh
Y2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZh
cmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBQdXRCeVZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBr
aW5kKCkgPT0gU2V0dGVyOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0g
ISFvdGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICht
X2lkZW50aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBOb3RTZXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAg
ICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQo
b3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRy
YW5zaXRpb246IHsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7
CisgICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZSgqdGhpcykpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFu
c2l0aW9uOiB7CisgICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRT
dHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdl
ZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRp
b25TZXQpOworICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBTZXR0ZXI6IHsKKyAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1
cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxM
aW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlv
blNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICgh
bWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAg
ICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNl
KQoreworICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxh
Y2UubV9raW5kID09IFJlcGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1f
b2Zmc2V0KTsKKyAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBB
U1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNl
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1l
cmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRk
IGEgbmV3IGZpZWxkIHdoaWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hp
bGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24n
dAorICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRo
ZSByZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVz
U3RvcmFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2Uu
bV9vbGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1
Y3R1cmUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1f
bmV3U3RydWN0dXJlKQorICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sK
KyAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9u
ZXdTdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlv
blNldC5hcmVTdGlsbExpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCI8Iik7CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJl
bXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAg
IG91dC5wcmludCgKKyAgICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29u
dGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250
ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAi
LCAiLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgor
ICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRp
dGlvblNldCwgY29udGV4dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAi
LCBtX29mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOworICAgICAgICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5VmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5r
U3RhdHVzOworCitjbGFzcyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAg
UmVwbGFjZSwKKyAgICAgICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAg
ICAKKyAgICBQdXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAg
ICAgICA6IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkK
KyAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmll
cihXVEZNb3ZlKGlkZW50aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5VmFyaWFudCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsK
KyAgICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRp
ZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0
KTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAg
ICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29s
ZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1
Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
IHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1
cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUo
KTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNl
IHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFu
c2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3
cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3Mg
Zm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhp
cyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0
IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVt
cGxhdGVkIGhlbHBlcnMuCisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0K
KyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxs
TGlua1N0YXR1cy5nZXQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRv
ciYpOworICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIg
IT0gISFvdGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKG1faWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBv
dGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1
cmVTZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFu
c2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAg
ICBLaW5kIG1fa2luZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1
cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51
bGxwdHIgfTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Cisg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAppbmRleCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3
Li5mY2UwZjRkOGVlMTBlZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02
MiwxMCArNjIsMTAgQEAgR2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0
OwogfQogICAgIAotUHV0QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0
YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBz
dGF0dXMpCitQdXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsK
LSAgICBhdXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsK
LSAgICBQdXRCeUlkU3RhdHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBz
dGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3Rh
dHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoY29kZU9yaWdpbiwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTEwNyw2ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdn
cmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdl
dHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBm
b3IgKGF1dG8mIHBhaXIgOiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVs
ZXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCmluZGV4IGJkMTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0
OTgzZGJjNzY3ZDA3ZTI4MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgIkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJJbkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRT
dGF0dXNlcyB7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVz
KiBhZGRHZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsK
LSAgICBQdXRCeUlkU3RhdHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBj
b25zdCBQdXRCeUlkU3RhdHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFk
ZEluQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBE
ZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVC
cmFuZFN0YXR1cyYpOwpAQCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7
CiAgICAgCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpw
YWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0
dXM+Pj4gcHV0czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxJbkJ5U3RhdHVzPj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzPj4+IGNoZWNrUHJpdmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZj
ZWIyM2RjM2NjMjFkMzI3ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRm
NzgxOWQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpyZXNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVC
bG9jayogYwogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJl
c2V0R2V0QnkoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5
SUQoY29kZUJsb2NrLCAqdGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0
UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJs
b2NrLCAqdGhpcywgSW5CeUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEy
OGU2ZTI1MDFhYWIxOGU1NWQ0MWE0Li5lMjI1NDBjMDliYzc4M2U3ZDhlMDZkNTNiN2NhODA4NzFl
ZTY3MjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaApAQCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBp
bnQ4X3QgewogICAgIEdldEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZh
bCwKLSAgICBQdXQsCisgICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAg
ICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCBk
MWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMxN2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0
NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC00Nyw3ICs0
Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNYXRo
Q29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBP
YmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJT
dHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAgICAgICAg
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwor
ICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRC
eU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAg
aWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2lu
YWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJl
KCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFw
cGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVhbGx5IGEgcmVwbGFjZS4KICAgICAgICAg
ICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmlu
ZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wg
aXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQ
dXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBhdXRvIHByaXZhdGVGaWVsZFB1dEtpbmQg
PSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1
dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKTsKLSAgICAgICAgICAgIFB1dEJ5
SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAg
IFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAg
ICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAgICAgIGlzRGly
ZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0g
dHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAg
ICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaENvbmRp
dGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9
IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1
Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJl
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9p
ZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOiB7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQotICAgICAgICAgICAgbm9kZS0+
cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQo
KSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1
Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQyMGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTcz
Yi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUzODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUs
NyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRC
dXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA2M2U2OGQwMzdmZTExMTAxYWU0
MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi43ZjQwMmU2OTdmOWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRm
MjIzNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
Ci0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAi
UHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgog
I2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNp
bmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgYm9v
bCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgY2hlY2tQcmVz
ZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgLy8gV29ya3Mgd2l0aCBib3Ro
IEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAg
IC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQ
dXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CiAgICAgTm9k
ZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiwgTm9kZSogdmFsdWUp
OworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0
IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0yNTMsMTMg
KzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2
YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5
SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVl
LCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKKyAgICAg
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQ
dXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKICAgICB2b2lkIGhhbmRsZVB1
dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKKyAg
ICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwKICAgICAgICAgYm9vbCBp
c0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlKTsKIAogICAgIHZv
aWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29u
c3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAgICAgICBOb2RlKiBi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2Rl
KiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAg
IHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0
aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUpOwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2Ug
bm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4g
dGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24gdGhlIHByb3RvdHlwZSAoaXQgd291
bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlvdXNseSByYXJlIGlmIHRoZXkgZGlkbid0
KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVjdHVyZVNldCgpIGhhdmluZwotICAg
ICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJl
IHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsu
CisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdh
eXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdv
cmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFu
IE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZlciwgdGhpcyB3aWxsCiAgICAgICAgICAg
ICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEg
aHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCi1Ob2RlKiBC
eXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgIFJFTEVBU0VfQVNT
RVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVj
a1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
cl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwogICAgIHJldHVybiBo
YW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1
ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
QnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlCiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAotICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUs
IGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5
SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFs
dWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFwaChwdXRCeUlkU3RhdHVzLm1ha2VzQ2Fs
bHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVz
Lm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVy
KSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNv
ZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5
U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0
SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1Np
bXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFj
Y2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisg
ICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50
cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0
QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsK
LSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygp
ID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0
YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEp
IHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1h
a2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4g
T3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKLSAgICAg
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVz
LCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFy
aWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgp
KSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2
YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJp
YW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlTdGF0dXMubnVtVmFyaWFudHMo
KTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5U3RhdHVzW3Zh
cmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlk
U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBp
c0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVj
dCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCArNTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5s
aW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMs
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3Rh
dHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0
aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlP
ZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwot
ICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAg
ICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFw
aChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0
YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAg
ICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAg
ICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVw
bGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgc3RvcmUo
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5M
SUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgIGFk
ZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkg
ewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5
SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTEzNSwxMiArNTEzNCwxMiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwg
cHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7
CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBs
b2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOwogICAg
ICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVmYXVsdDogewotICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVj
bWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfSB9
CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1
dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAg
ICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8
fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxp
bmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICgh
cHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAh
T3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVz
LmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAg
IGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5m
byhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0g
ICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2Vz
Q2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygp
CiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygp
Ci0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgfHwg
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVO
YW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCks
IGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTIxMSwy
OSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAg
IAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9y
aWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwog
ICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJ
ZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0
YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZh
cmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmll
ck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRC
eU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsK
LSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07Cisg
ICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2
YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CisgICAgY2FzZSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNE
ZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwog
ICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQw
ICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAg
ICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSBmYWxzZTsKIAotICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVP
cmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxl
ZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAg
ICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uIEZvciBgcHV0
X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29tZSBpbmZvIGZyb20KLSAgICAgICAgICAg
ICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hlZCBjZWxsIHRoYXQgd2UgY291bGQgdXNl
IGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjc3OQotICAgICAgICAgICAgICAgIGlm
IChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8K
LSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkg
ewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwot
ICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAg
ICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAs
IG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVu
dGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmll
ci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1i
b2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lz
Q29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lk
ZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVp
ZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAg
bG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQp
OworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgYnl0ZWNvZGUubV9wdXRL
aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRy
eUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5mbyhieXRlY29kZS5tX3B1dEtpbmQp
LCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAg
ICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxp
bmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmln
aW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1
aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0
T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKKyAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywg
dWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRP
cGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAgfQogCkBAIC03OTc5LDEzICs3OTY4
LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXM7Cisg
ICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwogICAgICAgICAgICAgICAgIGlmICh1
aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQotICAgICAgICAgICAg
ICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisg
ICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpS
ZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXpl
KCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5m
byhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQo
Ynl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg4MTks
NDUgKzg4MDgsMjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNv
ZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGUKICAgICBOb2RlKiB2YWx1ZSA9
IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICBib29sIGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5
SWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
cjsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVz
OwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29k
ZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQg
aW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAg
IC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAg
ICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAg
ICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
Y29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBi
eVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2Vs
bCgpKTsKKyAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAg
ICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisKKyAgICAgICAgUHV0QnlTdGF0dXMg
c3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0
YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3Vy
ZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRp
Zmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2Vs
bCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlk
KSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1dEJ5
SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAg
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigp
LCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIs
IHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1v
ZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQog
CiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAppbmRleCA5MTY0NzBkMTdkNTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3
OTU4YjRhLi42ZjIwNGQyYzVkZTBhNjEyZjczMWM5NTdiNDYxZGNmMzBjNGExMWEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtNTY5LDcgKzU2OSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFy
Z3VtZW50czoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAKaW5kZXggODZhM2QwNzY2NGQ3ZmE5Mjc1MTI5OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNl
OWZmMGViNWRhNTEwZWMyMzQwNjQ2MmE3MWU4ODA5NTA5NjIyZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgx
LDcgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAppbmRleCBlYWVhZjg1ZWEyNTQx
NzI1NzU1ZjQ4Y2VmZGVkZTAzYjgxYzlmYTJhLi5iODgyNWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFk
OTMyNGE0MGMxNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAKIAogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmlj
RmlsdGVyKFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5jb250YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTUxMywxMSAr
NTEzLDkgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeVZh
cmlhbnQ6OnJlcGxhY2UodmFyaWFudC5pZGVudGlmaWVyKCksIHZhcmlhbnQub2xkU3RydWN0dXJl
KCksIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEz
LDcgKzEyMTEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFn
ZSwgY2hpbGRFZGdlKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1
ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2Rl
KiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7CiAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9
IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTIyNCw3ICsxMjIyLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBudWxscHRy
OwotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5h
ZGQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICB9CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsK
ICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAKLSAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgIGlmIChkaWRBbGxvY2F0ZVN0b3JhZ2UpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBT
cGVjTm9uZSwgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSwKQEAgLTE0MDYsMTAgKzE0MDQs
MTAgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICBpZiAoIWJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50
aWMpLAogICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCks
Ci0gICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAg
ICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICBpc0RpcmVjdCwg
cHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkK
QEAgLTE0MjQsOCArMTQyMiw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKIAogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAg
ICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKLSAgICAgICAgZm9yIChjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7Ci0gICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAg
ICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OCw3ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSB8fCBwcml2YXRl
RmllbGRQdXRLaW5kLmlzU2V0KCkpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERv
bid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhp
cy4KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlJZFN0YXR1cywgbm9kZS0+b3JpZ2luLAot
ICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCisgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeVN0YXR1cywgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAogICAgICAgICAg
ICAgRWRnZShiYXNlTm9kZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2Mz
N2UxOGYxZS4uZTY0ODE2N2MxMTg2YmM4YzkzZjMyZThjNTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0
dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0
ZTlhNWNmMmQ1NmM2NDgzZDIyYWJiYTY2NzJhYzczODUwOS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFj
NTI0OTE1M2Y5ODZlMzk4YTI2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCkBAIC0yODY1LDcgKzI4NjUsNyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0
NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzLi4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYw
YTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApA
QCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5
U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7
Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0
dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAg
ICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRhZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50
b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmEx
Y2E5OGJkMjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0y
NTIsNiArMjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1
ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdj
ZGE5YTkyLi4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDEx
IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1f
cHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihn
ZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQ
dXRCeVZhbEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAg
eworICAgICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5
VmFsR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxC
eUlkKGNvbnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNs
b3dQYXRoKQogICAgIHsKICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFw
cGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUs
NyBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9n
ZXRCeUlkc1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlW
YWxHZW5lcmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2Rl
bEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0
b3I+LCA0PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVElu
QnlJZEdlbmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRk
MGYuLjJiZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRN
b2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0
ZSkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEu
LjdjYWEyMDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2
YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRl
ICJQdXRCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAj
aW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAg
LTkyLDcgKzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRp
UHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZl
Y3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFu
dCwgMj4gdmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7
CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAs
MTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1
cyo+KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9v
bCBoYXNQdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsK
ICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0
QnlTdGF0dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlk
U3RhdHVzKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7
CisgICAgICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvLmFzPFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3Rh
dHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2Zl
OGExYWMzNzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcy
MjRlZGJlZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCkBAIC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oRmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJJbkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0
QnlJZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFu
ZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5k
ZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhmZDU4YS4uMWY0MTgzMThhNGMw
ZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
CkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAg
LTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhvc2Ug
bm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4gVGhpcyBt
ZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBj
YW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQgdHlw
ZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBh
cmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3Vy
cmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0
LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0
ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVhcigpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuYWRk
KHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRh
dGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgIGRh
dGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcgQEAgY2xhc3MgT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoK
ICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICAgICAg
ICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYyZWNlODBmZTc0ZjIuLjg5ZTVl
ZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01hcFNldDoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoK
LSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1
dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJh
bmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRiOWM5YTVhMjAuLmQ1NDk2NDQ1
MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCBhYmM4ZDE4YWEzOTc2NGEyZjljMGMwNzQx
Y2ZkMWU5YTU4ZGRjNDI1Li41ZGEwNDM4N2I2ZDBlZTg5ODc0OGMyOWVjNzc4NjRmYmM5MWViMGYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYx
MGE0Yy4uYzhmYzE1NzQxNTlkNDQ2Y2RlYzg5ZTg3Y2Q3MThkMzBhNTIwMTY5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC01
ODcxLDcgKzU4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggNTQxMGQ5MDg5NmRj
NGYwMTA1NzkzMGRmODJmNjYxOTJiODFmNmMwZi4uYzVlNWNmMzZhNzcwZDE1ODNiNjkzZGZkODgx
ZDY0MjRhYjE3YmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAKQEAgLTMxMiw4ICszMTIsOCBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERh
dGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAh
dmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmRmZ1Nob3VsZFdhdGNoKCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCBmZGE2NGQzNWRhMzQyODg5
Yzc5OGMwNTFlOTU3NmU4YTFlMzNhMzliLi5mMWEzODA5ZDdlZmUzMGY4ZDU5YmEyMWZhY2QwNzA5
ZTQzOGI5MDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFy
Z3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBjbGFzcyBWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1
dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAg
ICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CkBAIC00MjEsNyArNDIxLDcgQEAgY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBG
aWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoK
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggMDNmODY1MmM2Y2I4MmM2MjAy
MGQxZTY2YmI1OWY0NjU5MWQ4M2U0Yy4uODNiNTFiYTljZjc2NWRhMDQ2MzczYTc5YjFjYTAzMzBj
NDNjN2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcApAQCAtNDA3LDcgKzQwNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJD
YWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggYjAwMWQxMzJmMDJmZmMzODI1M2MzOGRm
MmU0OWIwY2YzNmU2MmY2Ni4uYTU0MzgwOTY1ODBlNDJmNzUxNTQ2ZDM1OWJjYjA0MTFkZmQ0ODYw
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtMTY0OSw3ICsxNjQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTg5NTEsNyArODk1MSw3IEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICBQdXRCeVZhcmlh
bnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLnNpemUoKTsgai0tOykgewogICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpW2pdKTsKICAgICAgICAgICAgICAgICBiYXNlU2V0
LmFkZChzdHJ1Y3R1cmUpOwpAQCAtODk2NiwxNiArODk2NiwxNiBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgewogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEu
dmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAg
ICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKIAogICAg
ICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3Rv
cmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24sIHZh
cmlhbnQua2luZCgpKTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9k
ZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50Lmtp
bmQoKSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRM
YXppbHkoCiAgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5P
d25lcigpLAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC04OTg3LDcgKzg5ODcsNyBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdG9yZVByb3Bl
cnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0
KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZh
cmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiCmluZGV4IDY5N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQwOWY0ZjUxOWIwNjguLjc4
ZmQ0OTQzZjllY2JjNGMzNWM3Y2RjYjMyYjczNzdjYWI5ZjFlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvRFNMLnJiCkBAIC0xNDEsNyArMTQxLDcgQEAgZGVmIHNlbGYud3JpdGVf
Ynl0ZWNvZGVfc3RydWN0cyhieXRlY29kZV9saXN0LCBieXRlY29kZV9zdHJ1Y3RzX2ZpbGVuYW1l
KQogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29k
ZS5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlk
U3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxh
Z3MuaCIKICNpbmNsdWRlICJUb1RoaXNTdGF0dXMuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMGI0YzJiOWJlMGY1ZmZmMTUxYTNiMDdlOWFh
MjRmY2NmOTA1MDM5OC4uNDExODZkYmU5NDIwOTYyNzAwYTViOTc2OTEzZmYwYTdiMjRiN2FhNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xMzU3
LDcgKzEzNTcsOCBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJs
ZXIgewogICAgIH0KICAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBw
YXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKICAgICB7Ci0gICAgICAg
IG1vdmVJbnRzVG9Eb3VibGUocGF5bG9hZEdQUiwgdGFnR1BSLCBmcHIsIHNjcmF0Y2hGUFIpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaEZQUik7CisgICAgICAgIG1vdmVJbnRzVG9Eb3Vi
bGUocGF5bG9hZEdQUiwgdGFnR1BSLCBmcHIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGJveERv
dWJsZShGUFJSZWcgZnByLCBKU1ZhbHVlUmVncyByZWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lD
U3RhdHMuaAppbmRleCBmMDRjMWY0MjhlMTBiZmM3MWZhNWNlMzVlMDAyODY4YmI3OGFkZWY2Li45
MWIzYjMxNTUxMGRhNjgyNGIzYzk2MzQxMGUzMzZkOTU4OWFiYzdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaApAQCAtNjcsMTAgKzY3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IG1hY3JvKE9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpIFwKICAgICBtYWNybyhP
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6ZSkgXAog
ICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRQdXRQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGlt
aXplKSBcCi0gICAgbWFjcm8oUHV0QnlJZEFkZEFjY2Vzc0Nhc2UpIFwKLSAgICBtYWNybyhQdXRC
eUlkUmVwbGFjZVdpdGhKdW1wKSBcCi0gICAgbWFjcm8oUHV0QnlJZFNlbGZQYXRjaCkgXAotICAg
IG1hY3JvKEluQnlJZFNlbGZQYXRjaCkgXAorICAgIG1hY3JvKFB1dEJ5QWRkQWNjZXNzQ2FzZSkg
XAorICAgIG1hY3JvKFB1dEJ5UmVwbGFjZVdpdGhKdW1wKSBcCisgICAgbWFjcm8oUHV0QnlTZWxm
UGF0Y2gpIFwKKyAgICBtYWNybyhJbkJ5U2VsZlBhdGNoKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBs
YWNlV2l0aEp1bXApIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYykgXAogICAg
IG1hY3JvKE9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCBjOWIwMWMwZDA1YTVkNmYwYzExZDBhMzczODFjMmQ5OGVmYTQ3MTMy
Li41MGRlODU1YjZhYzkwZWU2ZDNkMWM5NjFlNDQ4NDgyMzk1YTQ2MTZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC01MTAsNiArNTEwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICBtX2dldEJ5VmFsSW5kZXggPSAwOwogICAgIG1fZ2V0QnlJZFdp
dGhUaGlzSW5kZXggPSAwOwogICAgIG1fcHV0QnlJZEluZGV4ID0gMDsKKyAgICBtX3B1dEJ5VmFs
SW5kZXggPSAwOwogICAgIG1faW5CeUlkSW5kZXggPSAwOwogICAgIG1faW5CeVZhbEluZGV4ID0g
MDsKICAgICBtX2RlbEJ5SWRJbmRleCA9IDA7CkBAIC02NjIsNiArNjYzLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRJ
bmRleCA9PSBtX2dldEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlk
V2l0aFRoaXNJbmRleCA9PSBtX2dldEJ5SWRzV2l0aFRoaXMuc2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtX3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9wdXRCeVZhbEluZGV4ID09IG1fcHV0QnlWYWxzLnNpemUoKSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9pbkJ5SWRJbmRleCA9PSBtX2luQnlJZHMuc2l6ZSgpKTsKICAgICBSRUxF
QVNFX0FTU0VSVChtX2luc3RhbmNlT2ZJbmRleCA9PSBtX2luc3RhbmNlT2ZzLnNpemUoKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCA9PSBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLnNpemUoKSk7CkBAIC05MDksNiArOTExLDcgQEAgdm9pZCBKSVQ6Omxpbmso
KQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOworICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCA0ZGE3YTJmZDY2ZjE1MGNmY2QzNTkwMmZlOTNlNTRmZWQyYTVhZDJlLi4wZGRkZmY0OTJi
YTMxYmZmMDRhMDUwYjc0YjMyMTJkYTYyMWNlZmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTIyNSwyOCArMjI1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
SklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlW
YWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5k
LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9Ci0KICAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOwpAQCAtMjc1LDEwICsyNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQpOwogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIs
IEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhD
YWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxlSWRlbnRp
Zmllcik7CiAKQEAgLTEwODMsNiArMTA1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8SklUR2V0QnlWYWxHZW5lcmF0b3I+IG1fZ2V0QnlWYWxzOwogICAgICAgICBWZWN0b3I8
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgICAg
IFZlY3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRzOworICAgICAgICBWZWN0b3I8
SklUUHV0QnlWYWxHZW5lcmF0b3I+IG1fcHV0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUSW5C
eUlkR2VuZXJhdG9yPiBtX2luQnlJZHM7CiAgICAgICAgIFZlY3RvcjxKSVRJbkJ5VmFsR2VuZXJh
dG9yPiBtX2luQnlWYWxzOwogICAgICAgICBWZWN0b3I8SklURGVsQnlJZEdlbmVyYXRvcj4gbV9k
ZWxCeUlkczsKQEAgLTExMTAsNiArMTA4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1
bnNpZ25lZCBtX2dldEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBt
X2dldEJ5SWRXaXRoVGhpc0luZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9w
dXRCeUlkSW5kZXggeyBVSU5UX01BWCB9OworICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5VmFsSW5k
ZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlJZEluZGV4IHsgVUlOVF9N
QVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAg
ICAgICB1bnNpZ25lZCBtX2RlbEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRl
eCA2OWJmMWExYzNmOGExYTM5MTY5YzZkMzk5YzJiMGM2NzZjODhjZjY0Li5hOTBjODY5ZDM5Nzk5
NzZjNmZmYTZlZGQyM2ZjMzI2MzQ0MmY1OWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTQyLDcgKzE0Miw3
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCiAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNv
ZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwg
dXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQorICAgICAgICA6IEpJVEJ5
SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6UHV0QnlJZCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BS
KQogICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgICAgICwgbV9wdXRLaW5kKHB1
dEtpbmQpCiB7CkBAIC0zODEsNiArMzgxLDY3IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6
OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKICAg
ICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExv
Y2F0aW9uOwogfQogCitKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBF
Q01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQorICAgIDogQmFzZShjb2RlQmxvY2ss
IGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdp
c3RlcnMpCisgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9wdXRLaW5kKHB1dEtp
bmQpCisgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgbV9z
dHViSW5mby0+aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisKKyAgICBtX3N0dWJJbmZv
LT5iYXNlR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+cmVncy5wcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5LnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZUdQ
UiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSID0g
c3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5iYXNl
VGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZVRhZ0dQUiA9IHZh
bHVlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8tPnYucHJvcGVydHlUYWdHUFIgPSBwcm9wZXJ0
eS50YWdHUFIoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit7CisgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgeworICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIpOworICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIH0gZWxzZQorICAgICAg
ICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisKK3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtC
dWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKK3sKKyAgICBCYXNlOjpmaW5h
bGl6ZShmYXN0UGF0aCwgc2xvd1BhdGgsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KG1fc3RhcnQpKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpCisgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKK30KKworVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBKSVRQdXRCeVZhbEdl
bmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbigpCit7CisgICAgc3dpdGNoIChtX3B1dEtpbmQpIHsK
KyAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgaWYgKG1fZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Cisg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2RlLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNT
dHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFw
cHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCiBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OkpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgYnJhbmQsIEdQUlJlZyBzdHViSW5mb0dQUikKICAgICA6IEJh
c2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NU
eXBlLCB1c2VkUmVnaXN0ZXJzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4IGVlNjgxNDEwMWE4MWViZDE1NWJmNGRi
NjkzZmY0N2M4YTI3OGY3ZmIuLjMwNWI3MGQzZjkyYjFmZTNiNWE2NjdkYjMzNDRiYjY2N2Q2ZmI0
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgKQEAgLTEyOSw5ICsxMjksNyBAQCBjbGFzcyBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAKIGNsYXNzIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiBwdWJsaWM6
Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvcigpCi0gICAgICAgIDogbV9lY21hTW9kZShFQ01BTW9k
ZTo6c3RyaWN0KCkpCi0gICAgeyB9CisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVs
dDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLApAQCAtMTQyLDEw
ICsxNDAsNDIgQEAgY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRC
eUlkR2VuZXJhdG9yIHsKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rp
b24oKTsKIAogcHJpdmF0ZToKLSAgICBFQ01BTW9kZSBtX2VjbWFNb2RlOworICAgIEVDTUFNb2Rl
IG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKICAgICBQdXRLaW5kIG1fcHV0S2lu
ZDsKIH07CiAKK2NsYXNzIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yIHsKKyAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I7CitwdWJsaWM6CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisK
KyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwg
Q29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHBy
b3BlcnR5LCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNNQU1vZGUs
IFB1dEtpbmQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3dQYXRoSnVtcC5tX2p1bXAuaXNTZXQoKSk7
CisgICAgICAgIHJldHVybiBtX3Nsb3dQYXRoSnVtcC5tX2p1bXA7CisgICAgfQorCisgICAgdm9p
ZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNs
b3dQYXRoTGlua0J1ZmZlcik7CisKKyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKKworICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigp
OworCitwcml2YXRlOgorICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0
KCkgfTsKKyAgICBQdXRLaW5kIG1fcHV0S2luZDsKKworICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsK
KyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7
Cit9OworCiBjbGFzcyBKSVREZWxCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvciB7CiAgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggNzVkYzdjMzY5ZjJhZDNmYWIzMjBiOGViNzlmYzdkNzUzZjY4MDhmOS4uODc3NThi
YmU4NTJlZmMwZmM1ZGNjNjdkMDQ3MGEyMWIxMTZlMDJiMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQot
ICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGly
ZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6
OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCBy
YXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplYwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0
KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5
SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCBy
YXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7
CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJh
d0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEzLDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAg
ICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsK
KyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlk
LCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmll
bGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAog
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRl
bnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1
YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CisgICAgICAgICAgICBy
ZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVj
dHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwx
NiArOTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNo
aW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAg
ICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBv
bGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRT
bG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkU2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitz
dGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlH
ZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gKmluZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChi
YXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBieVZh
bEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChh
cnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5k
cygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVl
LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiAr
OTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwg
ZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9IAorICAgIH0KKwog
ICAgIGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAg
ICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2Zp
bGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5
S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRl
bnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5m
by0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUu
cHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3Rh
dGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVj
dCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
aWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0
QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAqbWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0
Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3Rh
dGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IEZBTExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5h
cnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9m
aWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3Rh
dGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdElu
ZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGRO
b3RUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNl
bGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkK
LSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlz
U3RyaWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBn
bG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIz
LDgyICsxMDE4LDU5IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZl
VXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUsIEVDTUFNb2RlIGVjbWFNb2RlKSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
LQotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGlt
aXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5v
dE9wdGltaXplZDsKLQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUu
aXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhp
bmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0K
LSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewot
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAg
ICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7
Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09w
dGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0
byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJh
eU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1v
ZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlN
b2RlKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3Qg
PSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9i
amVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpO
b3REaXJlY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2Ug
ZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBp
bmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAg
IGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQg
JiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAg
ICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwo
c3Vic2NyaXB0KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUg
PSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJzY3Jp
cHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewotICAgICAgICBjb25z
dCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlv
blJlc3VsdDo6R2l2ZVVwKTsKLSAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUt
PmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VS
VCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5z
ZWVuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0g
cHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFs
V2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgUHV0S2luZDo6Tm90RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAg
ICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpP
cHRpbWl6ZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25j
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nl
c3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUs
IGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CisKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3Jp
Z2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAg
YmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKKworICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGly
ZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6
OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAx
MCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5l
dmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1p
bmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVy
YXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8v
IHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93
UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAg
ICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQot
ICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
cHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2Rl
KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTEwOCwxMTcgKzEwODAsNDkg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZh
bHVlKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0
aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOwotfQotCi1zdGF0aWMg
T3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKLQotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQg
YWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBp
ZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRl
Y29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmpl
Y3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0
cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERpcmVjdChh
cnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgeworICAgIGlm
ICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0
LmlzSW50MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3Qt
PnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2Vu
ZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZSkgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAg
ICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2Rl
QmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsK
KyAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBh
dGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKICAgICAgICAgfQorICAgIH0KIAot
ICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3Qg
dGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAx
MCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygp
KQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXA7Ci0gICAgfSBlbHNlIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlk
ZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVy
dHlOYW1lKSkgewogICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgp
ICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0
dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQ
dXRCeVZhbERpcmVjdD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQ
dXRLaW5kOjpEaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAg
ICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2Ug
YSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ss
IHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAK
LSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1p
emVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNl
KSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3
aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2Ug
dGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRl
cmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdv
cnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhl
IGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50
IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgr
K2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICAgICAgICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAot
ICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7Ci19CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQo
dm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdp
dGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01B
TW9kZSBlY21hTW9kZSkpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKLSAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChi
YXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlEaXJlY3RQdXRCeVZhbE9w
dGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9iamVjdCwgc3Vic2Ny
aXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09
IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5
IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0g
ICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZv
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWM7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyk7CisgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHVi
SW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
ZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5
VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVj
dFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJv
ZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKQEAgLTEyMjgsMTEgKzExMzIsMTMgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWwKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAgc3R1YkluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpOwogfQogCiAKLUpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CkBAIC0xMjQyLDcgKzExNDgsMTAgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAgIEpTVmFs
dWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBSRUxFQVNF
X0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFs
T2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8s
IGVjbWFNb2RlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAg
ZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3Jp
cHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5kKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggY2QzZTFiZDQxNGVj
ZDE3MGJhNGEyNTU4OTM4ZjFlZDU0NDNhYjg5NS4uMzg0OWU4ZTY0OTAzOWExNDRmMTZiZjI2YTVk
YzNjYjhmZWNmMmJiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKQEAgLTIwMywxMCArMjAzLDExIEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAKIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlW
YWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1v
ZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
LCBBcnJheVByb2ZpbGUqLCBFQ01BTW9kZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEFycmF5UHJvZmlsZSosIEVDTUFNb2RlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqLCBFQ01BTW9kZSkpOworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKiwgRUNNQU1vZGUpKTsKIAogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUq
LCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggZDM5YmM2ZDc1M2Q2NGQ2ZWY3
M2E3OGE0NWY4YjlmNjU4MjUzNzIzZi4uZmU4M2FhNjUwZWVmN2NmYjM1YzllZGU0OTlmYzg4MTk0
NmUwOTE5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKQEAgLTQzOCw2NSArNDM4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2Rl
OworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/
IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwot
ICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92ZShJbW0z
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVsc2UKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9w
ZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0byBpc0ludDMyID0g
YnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVz
cygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7Ci0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
U2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9Xb3Jk
KHJlZ1QxLCByZWdUMSk7Ci0gICAgfQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwogCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQg
ZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBj
aG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBK
SVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91Ymxl
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzKSwgcmVnVDIsIGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsK
LSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJl
bCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGls
YXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwg
bW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKKworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTog
VXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8g
cmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02NjEsMTIgKzYyNywxNSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02NzQsMTYgKzY0MywxNCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgLCBwcm9maWxlLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNjk0LDI4ICs2NjEsMjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNjsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihlY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8t
Pm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplOwogICAgIGVsc2UKICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC03MzYsMTggKzcwMiwxOSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50
R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNjsK
IAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
IAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGlt
aXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlW
YWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIsIGVjbWFNb2RlR1BS
KTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1wKEFk
ZHJlc3MoYXJndW1lbnRHUFI0LCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
T3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQ
UjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlv
blB0clRhZyk7CiAgICAgZWxzZQogICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgwOSwxMyArNzc2
LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQ
UjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYnlWYWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihwdXRLaW5kLnZhbHVlKCkpLCBwdXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKQEAgLTg1MSwxNCArODE4LDE0IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRH
UFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5k
R1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAgIGpp
dC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXpl
KT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFs
SW5mb0dQUiwgcHV0S2luZEdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
IAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpAQCAt
MzI5MCw4MiArMzI1Nyw2IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVn
aXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRz
TGlua0ZvcldyaXRlQmFycmllciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
LSAgICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBudWxscHRyKTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9
IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChp
c0ludCh0eXBlKSkKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0
QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAvIEJp
Z1VpbnQ2NEFycmF5IG5ldmVyIGNvbWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NFUlQo
aXNGbG9hdCh0eXBlKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0K
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwg
YnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZSwgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJy
aWVyKSB7Ci0gICAgICAgIEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFzdCgp
LmNhbGxlZS5leGVjdXRhYmxlQWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYXJD
YWxscy5sYXN0KCkuZnJvbSwgbV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAg
ICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1
ZSgpKTsKLSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91
dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
cGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5l
IHB1dF9ieV92YWxfZGlyZWN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJl
Y3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRk
cmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3Ro
ZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBv
ZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRl
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9k
ZSk7Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFs
RGlyZWN0Pihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2
YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0zNDA3
LDUzICszMjk4LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRo
Q2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsK
LSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0
ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1p
dFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRv
bmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9j
b2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYg
KCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1f
ZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxs
U2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20s
IGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUg
OiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAg
fQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJC
YXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8g
Il9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3Ry
aW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7
Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAg
ICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAo
YnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRk
cmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1
dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBj
b25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHAp
LAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4g
YWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQs
IENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0RG91YmxlTG9hZChjb25zdCBJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC0zNzA5LDcgKzM1NTMsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeQogICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7CiAgICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwogICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2Ny
YXRjaCwgZnBSZWdUMCwgZnBSZWdUMSk7CisgICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0
Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsKICAgICByZWFkeS5saW5rKHRoaXMpOwogI2VuZGlm
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAppbmRleCA3NWQwYmQ3ZjZlZjM1Yzc2MjczMTNmMjZiYTY1YTE2OGQ4M2I5
NDU2Li5iOThiZmVjZWRhYTU1NjAxZjk1YTg4YmVkYTYxYjA5ZjFhMzQzNDcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
QEAgLTU0NSw3ICs1NDUsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1
b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIEp1bXAgcmVhZHkgPSBq
dW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50c1RvRG91
YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdUMCwgZnBSZWdUMSk7CisgICAgICAgIG1vdmVJbnRzVG9E
b3VibGUocmVnVDAsIHJlZ1QxLCBmcFJlZ1QwKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5hTihmcFJlZ1QwKSk7CiAgICAgICAgIHJlYWR5LmxpbmsodGhpcyk7CiAgICAgICAg
IHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEw
ZjM1ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjAyNWU3NmUzZTg5NmExMDM5MWM5MjM3OWY2MWU5
ZTI2MDczNGJlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4
LDUzICs1NjgsODYgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMp
OwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29u
c3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewot
ICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RN
b2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90
LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQ
cml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRC
eUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1
dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJU
KHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQp
IHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWM7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGF1dG8g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAgIHN3
aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERl
ZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RN
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewor
ICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGls
ZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDggKzcxNSw4IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNl
bGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTgxNywxMiArODUwLDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3ND
YXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBv
bGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVl
KSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxv
Y2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01B
TW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92
ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7
Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9s
ZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUp
KTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9s
ZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CiAKQEAgLTgzNSwxMiArODY4LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAg
IHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlD
YWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtp
bmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYgKHRyeUNhY2hlUHV0
QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9u
Q2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2lu
ZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxP
YmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFz
Q2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAg
ICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmln
SW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNl
IFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
ID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAg
IHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91
c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
Q29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6
OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNj
ZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVt
cCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0
cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5k
KQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5kID09
IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYyk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkK
QEAgLTk4Niw3ICsxMTEzLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5C
eSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYs
MjggKzE4ODMsNTEgQEAgdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQg
cmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25U
eXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0g
ICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1
bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlvblR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0g
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7
Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0g
ZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAg
IEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5j
dGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7
CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxv
Y2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CiAgICAgfQogCiAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJ
bkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2Mzcz
YzBhYzM2MjlkOGU2Li45YzIwMmFmODVkOTkwYTU3MWY5OTA2ZjkyNTU5NGY2MGM1YTRhZGU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBj
bGFzcyBHZXRCeUtpbmQgewogICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3Mg
UHV0QnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxC
eUtpbmQgewogICAgIEJ5SWQsCiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFz
cyBJbkJ5S2luZCB7CiAKIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiB2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
VmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwor
dm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
VmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsK
K3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwg
U3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoRGVs
ZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBK
U1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVj
dCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7
CiB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7
CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBD
YWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7CiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQpOwogdm9pZCByZXNldEluQnkoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0
ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBl
N2IxNTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNiLi43MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZi
YmEzMDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiAvLyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9mIGFsaWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVz
LiBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5
U3RhdHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5jcHApCisvLyBiZWNhdXNlIHRoZXJlIGlzIGNv
ZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeVN0YXR1cy5jcHApCiAvLyB3aGlj
aCByZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0aW5nIHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0
aCAibGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBpbXBsZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVx
dWl2YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhpcwogLy8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435789</attachid>
            <date>2021-08-18 12:26:32 -0700</date>
            <delta_ts>2021-08-18 15:15:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210818122631.patch</filename>
            <type>text/plain</type>
            <size>273950</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5lNjUxNDI3NTg1NTk0ZGY0
MDZkMzM5ZTg5ZjZiYzY4NzMxZjQ1YWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjEtMDgtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0
QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEtMDgtMTYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0IHVudXNlZCBMTEludCBvcGNvZGVzIGFy
ZSBub3QgaW5hZHZlcnRlbnRseSB1c2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4OThjLi5lYjBjMWM4NGJhMGZk
NjcwNGYzZjE4Y2JkODNmZmM4NTkwYjQzZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09i
amVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3RERE
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRS
ZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMz
MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2NywxMSArMjg2NywxMSBAQAogCQkwRjkzMzI5NDE0
Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRB
ODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQg
LyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEw
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04Njk4LDEwICs4Njk4LDEwIEBACiAJCQkJMEZE
M0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYx
NUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNE
MjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAg
Ki8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAq
LywKQEAgLTEwNTEwLDggKzEwNTEwLDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEg
LyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFF
NzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAz
MUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0
QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUz
MTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2Fz
ZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5j
cHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCmluZGV4IGRmODgzODZhODMyM2Q4NjkxMmNmZTUzNTMxZTNh
ODJkZmI0NGViOGUuLjkxMTdiYjg0NGM2MDdlYjVlNTIzM2ZiMzhhNDUyMjRiNDY3MzY0NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCkBAIC0xMDAxLDkgKzEwMDEsOCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB2b2lkIG1vdmVJbnRzVG9E
b3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXggMTQ0NWM3
OTFiMjhjZWY1ZGZjMTU2YzMxMjRjNmE0ZTIyMjFhYzFhNC4uNzRkMTI3NjI1YTc3YjUxMTY5YmFk
ZjlhZDM1YzdlODViMzUzOWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCkBAIC0yMDcyLDkgKzIwNzIsOCBAQCBjbGFz
cyBNYWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3Nl
bWJsZXI+IHsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0
ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAg
dm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBG
UFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAppbmRleCA4ZDAyMmUzYjgyNWY1OGQyZWY0ODgyMWIxYzJhOTQyNTY5MWQxYjQ5Li5hNjY5OTU5
NzA1NTBhOWFiNTFjZDI2ZDQ5MTk1NjY4ZjNiMGM5NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCkBAIC0xODMsMTQgKzE4
Myw2IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uIHsKICAgICAgICAgbW92ZUZsb2F0VG8zMihzcmMsIGRlc3QxKTsKICAgICB9CiAKLSAg
ICB2b2lkIG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIs
IEZQUmVnaXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKLSAgICB7Ci0gICAgICAg
IG1vdmUzMlRvRmxvYXQoc3JjMSwgZGVzdCk7Ci0gICAgICAgIG1vdmUzMlRvRmxvYXQoc3JjMiwg
c2NyYXRjaCk7Ci0gICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNo
KTsKLSAgICAgICAgb3JQYWNrZWQoc2NyYXRjaCwgZGVzdCk7Ci0gICAgfQotCiAgICAgSnVtcCBi
cmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm1fcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMz
NWI2Li5iMDQ1NGQxODAzM2EwMzM1ODkwNWM5ZGRmYjg3ZTExMzU0NDdjMWQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwx
OSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1
MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNv
bnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3Nywy
NCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3Vi
bGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAg
ICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZN
JiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgp
ID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtMTE5OSw5
ICsxMzAzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CkBAIC0xMjI3LDE2ICsxMzI4LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9m
Qm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGpp
dC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBp
c0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKQEAgLTEyNjIsMjEgKzEzNjMsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52
YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQu
YnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZEln
bm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAg
ICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwot
ICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUo
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gz
R1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzg3LDI1NCBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkg
JiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNv
dWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNo
ZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOworCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0
b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisjZW5kaWYKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90eXBl
ID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAgICAg
ICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlH
UFIsIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFu
Y2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3Rl
ZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091
dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBj
YXNlIEluZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0
byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0
ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsK
KyAgICAgICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogMzJiaXQKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlNjRUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3Rh
dGUuc2NyYXRjaEZQUikpOworICAgICAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKSk7CisgICAgICAgICAgICAg
ICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Vp
Z2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1pdHRlZCBp
biB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9maWxlCisgICAgICAgICAg
ICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAg
ICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0
b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVs
b3csIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAg
ICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0
KTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0
KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQor
ICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJv
ZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihz
Y3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
c3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9y
LmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAg
ICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdu
b3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOiB7Cisg
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0
dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhl
IHByb3BlcnR5LgorCisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlU
eXBlKG1fdHlwZSk7CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9w
ZXJ0eUdQUjsKKworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKSk7CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICAg
ICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5i
cmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNh
c2UgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hG
UFIpOworICAgICAgICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBk
b3VibGVDYXNlLmxpbmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRH
UFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKEFib3ZlLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAg
ICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5s
aW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNh
Z2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVu
ZDMyVG9QdHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlw
ZSkpIHsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91bmRzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCB2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAg
ICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikp
OworICAgICAgICAgICAgICAgIGppdC54b3IzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQu
anVtcCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgaW5Cb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgY2FzZSAxOgor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6
VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2Fs
bEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUaW1lc1R3bykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJv
dW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsK
KyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRl
LnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0
Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNj
cmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBz
dGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxODMsNiArMjUy
MiwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8g
YmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFy
dCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9k
eSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAg
ICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIg
KzI1NDgsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAg
ICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVp
bnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIy
ODQsNiArMjY0NSwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vz
c0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNl
IEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0
YTk2MjExMDUwODk5YmFkZmQ5YmUuLjE4NjQ0YWQ1MTBmODBiYmQ5NzUxZjgzNjY3MGZmOTBhOTMx
MDg0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApA
QCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJM
b2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAg
ICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAg
ICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwK
KyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAg
ICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAK
ICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUzYjg0OTE3
YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0zNiw3ICsz
Niw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgR2V0
QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsKK2NsYXNz
IFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJQ1N0YXR1
cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAgICAgR2V0
QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBpblN0YXR1
cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07
CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxldGVCeVN0
YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEy
ZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDcxMzUxOWRiYTk0YjIxNGZjZTQ1
NzEwZDc2YjIxMjNhZmQ3MGI3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0xMDIyLDYgKzEwMjIsNDUgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZSkKICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOgogICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRTdHJpbmdMb2FkIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkRG91YmxlU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQ29udGlndW91c1N0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIklu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJp
bnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWZhYjlkMzljN2E0
ZWE2ZTYxY2Y1NjQ4YWVmYWM5MGMxZjdjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3Rz
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5o
IgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXR1
c1V0aWxzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1
czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLXsKLSAgICBy
ZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwotfQotCi12
b2lkIFB1dEJ5SWRTdGF0dXM6OnNocmlua1RvRml0KCkKLXsKLSAgICBtX3ZhcmlhbnRzLnNocmlu
a1RvRml0KCk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2Nr
LT52bSgpOwotICAgIAotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLQotICAgIC8vIFdlIGFyZSBu
b3QgeWV0IHVzaW5nIGBjb21wdXRlRnJvbUxMSW50YCBpbiBhbnkgcGxhY2UgZm9yIGBwdXRfcHJp
dmF0ZV9uYW1lYC4KLSAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMg
cmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKLSAgICAvLyBJQyBpbXBs
ZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQuCi0gICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BQdXRQcml2YXRlTmFtZT4oKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwotCi0gICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQg
PSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwotICAgIGlmICghc3RydWN0dXJlSUQpCi0gICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVy
ZUlEKTsKLQotICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdT
dHJ1Y3R1cmVJRDsKLSAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7Ci0gICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgIH0KLQotICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKLSAgICAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
Ci0gICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgewotICAgICAgICBjb25k
aXRpb25TZXQgPQotICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcg
ZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQot
ewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotI2lmIEVOQUJMRShERkdf
SklUKQotICAgIGlmIChkaWRFeGl0KQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAu
Z2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvOwotICAgIFB1dEJ5SWRTdGF0
dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIHN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4LCB1aWQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZSAvLyBFTkFCTEUo
SklUKQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2Vy
LCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSkpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhKQotewotICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86
OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOwotICAgIGlmICghaXNJbmxp
bmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzdW1tYXJ5KTsK
LSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgewotICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIAotICAgIGNhc2Ug
Q2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAg
ICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHVi
OwotICAgICAgICAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNl
JiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogewotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0KLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOwotICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVj
dHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlNldHRlcjogewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbXBs
ZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgp
LCB1aWQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxl
eEdldFN0YXR1cy5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OlNob3VsZFNraXA6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2Vz
U2xvd1BhdGg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3Mu
YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAq
Y2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNv
bXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7Ci0gICAg
ICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVl
U2V0dGVyOgotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRl
cjoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAg
ICB9Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxv
Y2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250
ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQotewotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJh
c2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNC
YWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgZm9y
IChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKLSAgICAgICAgSUNT
dGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOwotICAgICAgICAKLSAgICAg
ICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlJZFN0YXR1cyYgcmVzdWx0KSAtPiBQdXRC
eUlkU3RhdHVzIHsKLSAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmln
aW4pKSB7Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNv
bXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFw
LCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxF
eGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5zdHVi
SW5mbykgewotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRp
bWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0
ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGlt
aXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKLSAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVz
LnB1dFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5l
QmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsIGNhbGxFeGl0
U2l0ZURhdGEpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCkKLXsKLSAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICBpZiAoc2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKLSAgICAKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNl
dC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9i
YWxPYmplY3RUeXBlKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMp
OwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRl
TmFtZUJ5SWRgIGRlZmluZSBtb2RlCi0gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBh
cmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0
YWtlIAotICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KLSAgICAg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KLSAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCi0gICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAotICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCi0gICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNl
dCBtb2RlIGFuZCBpdAotICAgICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQotICAgICAgICAvLyB0cnlpbmcgdG8g
c3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQot
ICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBl
eGVjdXRlZC4KLSAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8v
IE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUg
d2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQotICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRv
IGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KLSAgICAKLSAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0
IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0
aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQotICAgICAgICAv
LyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCi0gICAg
ICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7Ci0g
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCB1aWQpOwotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwot
ICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMg
YWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KLSAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1
cmUsIHVpZCwgMCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIEFTU0VSVChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIAotICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJl
c3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQs
IG9mZnNldCkpOwotICAgICAgICBpZiAoIWRpZEFwcGVuZCkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0KLSAgICAKLSAgICByZXN1bHQuc2hy
aW5rVG9GaXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgUHV0QnlJ
ZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RhdGUgPT0gTWFrZXND
YWxscykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKG1fc3RhdGUgIT0gU2lt
cGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFr
ZXNDYWxscygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFr
ZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQg
UHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlk
U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpIHsKLSAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgUHV0QnlJZFN0YXR1czo6bWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYgb3RoZXIpCi17
Ci0gICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZdICgpIHsKLSAgICAgICAgKnRoaXMgPSBQ
dXRCeUlkU3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2Vz
Q2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLSAgICB9OwotICAgIAotICAgIHN3aXRjaCAobV9zdGF0
ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgaWYgKG90
aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIgOiBvdGhl
ci5tX3ZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgfQotICAgICAgICBz
aHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNT
bG93UGF0aDoKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIHJldHVybiBtZXJnZVNsb3co
KTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBQdXRCeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCi17Ci0g
ICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1cm47Ci0gICAgZmlsdGVySUNT
dGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1Jl
cGxhY2VJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAg
b3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgICAgICBvdXQucHJpbnQo
IihUYWtlc1Nsb3dQYXRoKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBNYWtlc0NhbGxz
OgotICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4ZTI1MmRiNjlhYzU3
MTNkYzhlOGY4YjY0NDAwMGNhZTYzMGIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiRXhpdEZsYWcuaCIKLSNpbmNsdWRlICJJ
Q1N0YXR1c01hcC5oIgotI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07Ci1jbGFzcyBKU0dsb2Jh
bE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIFN0cnVjdHVyZUNoYWluOwotY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87Ci0KLXR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOwotCi1j
bGFzcyBQdXRCeUlkU3RhdHVzIGZpbmFsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3
ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAv
LyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCi0gICAgICAgIFNp
bXBsZSwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KLSAg
ICAgICAgVGFrZXNTbG93UGF0aCwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhz
IHRoYXQgbWFrZSBjYWxscy4KLSAgICAgICAgTWFrZXNDYWxscwotICAgIH07Ci0gICAgCi0gICAg
UHV0QnlJZFN0YXR1cygpCi0gICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKLSAg
ICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdHVi
SW5mb1N1bW1hcnkgc3VtbWFyeSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgewot
ICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKLSAgICAgICAgICAg
IG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBj
YXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFy
eTo6TWFrZXNDYWxsczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtl
c1Nsb3dQYXRoOgotICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRo
QW5kTWFrZXNDYWxsczoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQpCi0gICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCi0gICAgewotICAgICAgICBt
X3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9v
bCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFw
JiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9y
aWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0jZW5kaWYKLSAgICAKLSAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICAKLSAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KLSAg
ICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KLSAg
ICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xv
d1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkg
Y29uc3Q7Ci0gICAgUHV0QnlJZFN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OwotICAgIAotICAg
IHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhbnRzOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KLSAgICBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFy
a0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2
b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKLSAgICAKLSAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKLSAgICAKLXByaXZhdGU6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJ
ZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0jZW5kaWYKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVj
b2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotICAgIAotICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsK
LSAgICAKLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4g
bV92YXJpYW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI0NTRkNjQ3ODJhOTY0MzkzMDlhZTlhMWZhMDQ4YTM4NzI1NTIxZjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50Lmgi
Ci0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIDogUHV0QnlJZFZhcmlhbnQoKQotewotICAg
ICp0aGlzID0gb3RoZXI7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBtX2tpbmQgPSBvdGhl
ci5tX2tpbmQ7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKLSAg
ICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uZGl0aW9u
U2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7Ci0gICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNl
dDsKLSAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgbV9jYWxsTGlua1N0
YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uo
Ci0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFJl
cGxhY2U7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3Vs
dC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Ci0gICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNl
dHRlcigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykK
LXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFNldHRl
cjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKLSAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cnVjdHVyZSogUHV0QnlJZFZhcmlhbnQ6Om9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKGtp
bmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5z
aXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVb
aV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RydWN0dXJlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmZp
eFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKGtpbmQoKSAhPSBU
cmFuc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9v
bGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
b2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX25ld1N0cnVjdHVyZSA9
IG51bGxwdHI7Ci0gICAgbV9raW5kID0gUmVwbGFjZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExp
bmtTdGF0dXMpOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6cmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Ci19Ci0K
LWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKLXsKLSAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBOb3RTZXQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJU
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKLSAgICAg
ICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KCp0aGlzKSkgewotICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2Fz
ZSBSZXBsYWNlOgotICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKG90aGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKLSAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVjdHVy
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICgh
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VkQ29uZGl0
aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBjYXNlIFNldHRl
cjogewotICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKLSAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtTdGF0
dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1l
cmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFtZXJnZWRD
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJh
c2VDb25kaXRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKQot
ewotICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7Ci0gICAgQVNTRVJUKHJlcGxhY2Uu
bV9raW5kID09IFJlcGxhY2UpOwotICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zm
c2V0KTsKLSAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKLSAgICBBU1NF
UlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOwotICAgIEFTU0VSVChyZXBsYWNlLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdp
bmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEg
bmV3IGZpZWxkIHdoaWNoCi0gICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUg
dGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAot
ICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSBy
ZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCi0gICAgCi0gICAgaWYgKHJlYWxsb2NhdGVzU3Rv
cmFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHJlcGxhY2UubV9v
bGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1
cmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgot
dm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0K
LQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQotewot
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
IChraW5kKCkpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOgotICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgb3V0
LnByaW50KAotICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCi0gICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAi
LCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOgotICAg
ICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRp
b25TZXQsIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwg
bV9vZmZzZXQpOwotICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3Rh
dHVzKTsKLSAgICAgICAgb3V0LnByaW50KCI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWE3M2EyZjhkNGI1ZTVmMGEx
ZGU0MDhhNWZiYmQxY2I3YWIyNTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
Q2FsbExpbmtTdGF0dXM7Ci0KLWNsYXNzIFB1dEJ5SWRWYXJpYW50IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIEtpbmQgewotICAgICAgICBOb3RTZXQs
Ci0gICAgICAgIFJlcGxhY2UsCi0gICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFNldHRlcgot
ICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoKQotICAgICAgICA6IG1fa2luZChOb3RT
ZXQpCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX25ld1N0
cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0KLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFj
ZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3Rh
dGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7Ci0gICAgCi0gICAgS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8
IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAg
fQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAot
ICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0
dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgICAg
IHJldHVybiBtX25ld1N0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhUcmFuc2l0
aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLQotICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygp
IGNvbnN0OwotICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBt
YWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0g
ICAgCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3
b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBo
ZWxwZXJzLgotICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJp
bnNpYzsgfQotCi0gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgot
ICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAgICB9Ci0gICAgCi0gICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7
Ci0gICAgfQotCi0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYg
b3RoZXIpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0
KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiByZXBsYWNlKTsKLSAgICAKLSAgICBLaW5kIG1fa2luZDsKLSAgICBQcm9wZXJ0eU9m
ZnNldCBtX29mZnNldDsKLSAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgU3Ry
dWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsKLSAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlhMmJiMDQ2ODE0YzI2ZWNjNDhhY2QwOTdhZTFmNjIwYWYxMjlkMmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCkBAIC0w
LDAgKzEsNTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCisK
KyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworYm9vbCBQdXRCeVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlh
bnQmIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3Zhcmlh
bnRzLCB2YXJpYW50KTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQoKQorewor
ICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsK
KyAgICAKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDog
eworICAgICAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4g
YW55IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCisgICAgICAgIC8vIFdlIGNhbiBhZGQg
c3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2lu
Y2Ugd2UgaGF2ZQorICAgICAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24g
b24gTExJbnQuCisgICAgICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5h
bWU+KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICB9CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSAmKHByb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBpZGVudGlmaWVyLT5pbXBsKCk7CisKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1l
dGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CisgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKKyAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsK
KworICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1
cmVJRDsKKyAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVw
bGFjZShudWxscHRyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgfQorCisgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0
dXJlSUQpOworICAgIAorICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Cisg
ICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgeworICAgICAgICBjb25kaXRp
b25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgfQorICAgIAorICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24obnVsbHB0
ciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKK30KKwor
I2lmIEVOQUJMRShKSVQpCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklU
KQorICAgIGlmIChkaWRFeGl0KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChD
b2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1
bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
c3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURf
UEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQoreworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAg
ICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHVi
SW5mbyk7CisgICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhzdW1tYXJ5KTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5
cGUoKSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4K
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
CisgICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAg
ICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVy
KSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAg
ICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAg
ICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZp
ZXIoKSwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFw
cGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQg
PSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZp
ZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRl
cjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0
dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0
dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OklubGluZWFibGU6IHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBt
YWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZT4oKS5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5r
U3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNp
dGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNj
ZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBj
b21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAs
IElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKK3sKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKTsKKyAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0
ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2Nr
LCBieXRlY29kZUluZGV4KTsKKyAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0
U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNTdGF0dXND
b250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVzIHN0YXR1
cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gYmxl
c3MgPSBbJl0gKGNvbnN0IFB1dEJ5U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVzIHsKKyAg
ICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7CisgICAgICAg
ICAgICAgICAgUHV0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAorICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwg
ZGlkRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAg
ICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlk
RXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQuc2xvd1ZlcnNpb24oKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAgICAgICBQ
dXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAg
ICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCisgICAg
ICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJ
bmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgaXNE
aXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sKKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAocGFyc2VJ
bmRleCgqdWlkKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
CisgICAgaWYgKHNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cygpOwor
ICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBQdXRCeVN0YXR1cyBy
ZXN1bHQ7CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHNldFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0
cmlidXRlcyk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1
dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1l
YW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBu
ZWVkIHRvIHRha2UgCisgICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9u
LgorICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JW
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisK
KyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
ciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBX
YXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJl
cGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlz
IGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNo
cG9pbnQgc2V0LgorICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMg
cHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAg
ICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRo
ZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8g
SklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRv
IGhhdmUgYSBsYXp5IHRoaW5neS4KKyAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZl
IHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
UHV0QnlWYXJpYW50IHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwg
c3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdl
IGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQg
aXQKKyAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
YmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEg
bm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8g
c2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVz
aXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0
IHRoaXMgaXMgcmVhbGx5CisgICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5p
dHkgY2hlY2tzLgorICAgIAorICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMg
b24gZGljdGlvbmFyaWVzLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAg
ICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0
IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50
IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3RydWN0
dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOworICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAorICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsK
KyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJl
IHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgorICAgICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQp
OworICAgICAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OworICAgIAorICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KFB1
dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24s
IGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgIGlmICghZGlkQXBwZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAg
ICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisK
K2Jvb2wgUHV0QnlTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIGlmIChtX3N0YXRl
ID09IE1ha2VzQ2FsbHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChtX3N0
YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3Zhcmlh
bnRzW2ldLm1ha2VzQ2FsbHMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93
VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/
IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQ
dXRCeVN0YXR1czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmds
ZUlkZW50aWZpZXJGb3JJQ1N0YXR1cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShQdXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRC
eVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6
ZmluYWxpemUoVk0mIHZtKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykgeworICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRC
eVN0YXR1czo6bWVyZ2UoY29uc3QgUHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhl
ci5tX3N0YXRlID09IE5vSW5mb3JtYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBh
dXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7CisgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1h
a2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOworICAgIH07CisgICAgCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBO
b0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICBjYXNl
IE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNp
bXBsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJp
YW50cywgc2V0KTsKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAg
ICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbikiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAo
bV92YXJpYW50cyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBU
YWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIihN
YWtlc0NhbGxzKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMmEx
YzczYzhmNDFjYTE5MmU1OGQ0YmUxZGUxNjYxM2Q5MDAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJF
eGl0RmxhZy5oIgorI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZp
ZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJ
bmZvU3VtbWFyeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgVk07CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0
cnVjdHVyZUNoYWluOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1h
cDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhh
c2g+IFN0dWJJbmZvTWFwOworCitjbGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZv
cm1hdGlvbiwKKyAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgorICAgICAgICBTaW1wbGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCisgICAgICAgIFRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMK
KyAgICB9OworICAgIAorICAgIFB1dEJ5U3RhdHVzKCkKKyAgICAgICAgOiBtX3N0YXRlKE5vSW5m
b3JtYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhT
dGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgg
fHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0
QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHN1bW1hcnkpIHsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246
CisgICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZv
U3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQ
YXRoOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgICAgICBtX3N0YXRlID0gTWFrZXND
YWxsczsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAgewor
ICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAg
c3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmll
bGRQdXRLaW5kKTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXND
b250ZXh0U3RhY2smLCBDb2RlT3JpZ2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGlj
IFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdp
bik7CisjZW5kaWYKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxz
OyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1Zl
cnNpb24oKSBjb25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQ
dXRCeVZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tp
bmRleF07IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNp
bmdsZUlkZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25z
dCBQdXRCeVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9y
U3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXgpOworICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsK
KyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBW
ZWN0b3I8UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMwNjM4NGFiMWNlZWJhZjIxOGE0MDk5NjMzMjQ3MWUzZjEwMGE3NmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcApAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRC
eVZhcmlhbnQuaCIKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVh
cElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIu
bV9pZGVudGlmaWVyKQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYg
UHV0QnlWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAg
ICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29s
ZFN0cnVjdHVyZTsKKyAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwor
ICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQg
PSBvdGhlci5tX29mZnNldDsKKyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAg
ICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5t
X2NhbGxMaW5rU3RhdHVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBu
dWxscHRyOworICAgIG1faWRlbnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92
ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0
cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICBy
ZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBv
bGRTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwor
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1
dEJ5VmFyaWFudDo6c2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0
KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOworICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAy
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25U
b1JlcGxhY2VJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUu
c2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUo
KTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJl
W2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Cisg
ICAgbV9raW5kID0gUmVwbGFjZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwor
fQorCitib29sIFB1dEJ5VmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0
dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICgh
IW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1faWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1f
aWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAh
PSBvdGhlci5tX29mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxh
Y2U6IHsKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBs
YWNlOiB7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVj
dHVyZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5l
d1ZhcmlhbnQgPSBvdGhlcjsKKyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlz
ID0gbmV3VmFyaWFudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0
dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVy
ZSAhPSBvdGhlci5tX29sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5t
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0
aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9
IFNldHRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAg
ICAgIGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlv
blNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwor
ICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRD
b25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRD
b25kaXRpb25TZXQ7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAg
ICAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKKyAgICAgICAgCisgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3Ry
dWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0
QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRC
eVZhcmlhbnQmIHJlcGxhY2UpCit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsK
KyAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zm
c2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1
Y3R1cmVzKCkpOworICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Cisg
ICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAv
LyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBh
bG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0
byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1
cmUgUy4gVGhpcyBkb2Vzbid0CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUg
YW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAg
ICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVy
ZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6Zmlu
YWxpemUoVk0mIHZtKQoreworICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZt
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0u
aGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+Zmlu
YWxpemUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
ZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoIjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZp
ZXIsICInLCAiKTsKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAg
ICAgICBvdXQucHJpbnQoImVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgUmVwbGFjZToKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNl
dCgpLCAiLCAiLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJh
bnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIs
IGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAg
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisg
ICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZm
MGY2ODQ1ZWMxYjMxZWI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ2FsbExpbmtTdGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAg
Tm90U2V0LAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBT
ZXR0ZXIKKyAgICB9OworICAgIAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIpCisgICAgICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNl
dChpbnZhbGlkT2Zmc2V0KQorICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV9pZGVudGlmaWVyKFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJp
YW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlW
YXJpYW50IHJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlv
bihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgUHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4pOworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90
U2V0OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQor
ICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7
CisgICAgfQorICAgIAorICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCk7CisKKyAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxs
b2NhdGVzU3RvcmFnZSgpIGNvbnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAg
IAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlk
KSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMg
aW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMg
aXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4g
bV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1
cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAg
ICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0
ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghIW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAo
bV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJs
YXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJl
cGxhY2UpOworICAgIAorICAgIEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zm
c2V0OworICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1f
bmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1fY29uZGl0aW9uU2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdk
Mjk0NWQ2MjFhZGMzZWJhZDcuLmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJj
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5jcHAKQEAgLTYyLDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0
dXNlczo6YWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1
c2VzOjphZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmIHN0YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjph
ZGRQdXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0
YXR1cyYgc3RhdHVzKQogewotICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlk
U3RhdHVzPihzdGF0dXMpOwotICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5n
ZXQoKTsKKyAgICBhdXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1
cyk7CisgICAgUHV0QnlTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogZ2V0cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgIGZvciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMp
CiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZWxldGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNh
YTg2OGEzMjYzMjRiNS4uOTQ5ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNs
dWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQ
dXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQ
cml2YXRlQnJhbmRTdGF0dXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBA
IHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRk
Q2FsbExpbmtTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7
CiAgICAgR2V0QnlTdGF0dXMqIGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBHZXRCeVN0YXR1cyYpOwotICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyog
YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAg
ICAgSW5CeVN0YXR1cyogYWRkSW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5C
eVN0YXR1cyYpOwogICAgIERlbGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgRGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBS
ZWNvcmRlZFN0YXR1c2VzIHsKICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRT
dGF0dXM+Pj4gcHV0czsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5p
cXVlX3B0cjxQdXRCeVN0YXR1cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0
ZXM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXgg
NzU5MThmNjc3MzE4M2NkZmNlYjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUx
MDdhNzAxNmRhODgxYmNlZGY3ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJh
c2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZToKICAgICAgICAgcmVzZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0g
ICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlL
aW5kOjpCeUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFs
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAg
IHJlc2V0SW5CeShjb2RlQmxvY2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDcz
MDRmYjE1NGU4NDBkODVkYTI4ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmUyMjU0MGMwOWJjNzgzZTdk
OGUwNmQ1M2I3Y2E4MDg3MWVlNjcyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xh
c3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRC
eUlkLAogICAgIEdldEJ5VmFsLAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFs
LAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4MjEu
LjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1
cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJl
cygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFz
ZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVy
Z2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0aGlz
U2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSBy
ZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBuZXdT
ZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAsMTAg
KzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8
fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8gcHJp
dmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9k
ZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVj
dHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51
aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAg
ICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgICAg
ICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1Nl
dDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
UHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDog
dmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVy
ZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0
LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDczLDcg
KzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgogICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoK
LSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1Miwx
MCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0g
ICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVy
ZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZp
bHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgx
NWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2
YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0Vs
aW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
QEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYz
ZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNiZDYyN2IuLjdmNDAyZTY5N2Y5ZGEwN2E0
YzU1YWRhNTEyYzQ3OWRjNGYyMjM3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcgKzcz
LDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2YXRl
RmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhw
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVDb2Rl
UGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAg
ICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICAv
LyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0
QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhl
IHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJp
YW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9kZSog
c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlh
bnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2
b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRl
c3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAg
ICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwg
RUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2Rl
KiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwog
ICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1
dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMm
LAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNN
QU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7
CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVGaWVs
ZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00
NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAg
ICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVz
ZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAvLyB0
aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUg
cHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5IHJh
cmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJl
U2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRo
YXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1
dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVu
dC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0
dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdodCBu
b3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0aGlz
IHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVy
ZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1
OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVkVmFs
dWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUp
CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7
CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBs
YWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUo
KSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlh
bnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSog
YmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlz
RGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNt
YU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5
SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFkZFRv
R3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwg
T3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29s
IGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUp
CisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRl
Y29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8
fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRT
dGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5
U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFw
aChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNG
VEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5u
dW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkg
fHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNl
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlz
dFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8fCBw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlmIChw
dXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUs
IHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgoRmls
dGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwg
YmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRz
KCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
c3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9m
ZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52
YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRz
KCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwog
ICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwg
dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlk
U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3Rh
dHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRC
eUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7Cisg
ICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsK
IAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwx
MiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQu
Y29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01
MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6
OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlW
YXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBOb2Rl
KiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVj
dCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJp
dmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3Qg
UHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRl
RmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlv
bnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlz
U2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5u
dW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAg
IGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VP
U1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1
dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0
YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhp
Y0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7
CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2
YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGls
YXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3Rh
dHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlT
dGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAg
ICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRp
UHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFk
ZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsK
KyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAg
ICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRk
VG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0
QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
KTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAg
ICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9yZShi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRC
eUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQo
KSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9
IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3Rh
dHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNl
bGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgo
KSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNv
ZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVz
IG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZv
cm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8g
ZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwg
dGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0g
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlW
YWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29r
U2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5
T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5m
by0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3lt
Ym9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4g
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBp
ZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkp
OworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0g
c3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1
dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVz
LCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQ
dXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAgICAg
aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5
dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1NiwxMiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgcHV0
QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAgICAg
ICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51
bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2Rl
KCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUo
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAK
QEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQ
cm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAgICAg
ICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwg
UHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmllbGRQ
dXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6OlRh
a2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAh
PSAxCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBd
LnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNv
ZGUubV9zY29wZSksIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtODgxOSw0NSArODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQog
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJl
Y3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9v
bCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3Rh
dHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRl
eCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2Rl
IGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBu
dWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlv
bi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJ
bmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0
aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51
aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5p
c0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKworICAg
ICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVN
YXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCisgICAgICAgIGlm
IChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmll
cigpKSB7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51
aWQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0Nl
bGwoKSkgeworICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNTeW1ib2xDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXVpZC0+aXNTeW1ib2woKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
SWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1
cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
aWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwg
Ynl0ZWNvZGUubV9lY21hTW9kZSk7CisgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRy
dWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAg
ICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2Vj
bWFNb2RlKTsKICAgICB9CiAKICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2
YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2Yz
MGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBA
IC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2
ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcApAQCAtODEsNyArODEsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmlu
ZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0
ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3
IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBk
YXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25s
eVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0
YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1
dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwg
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQog
ICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxk
RWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJh
bnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFw
aC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEy
NjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9y
YWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsK
IAotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApA
QCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIo
KS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAg
ICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0
YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkp
IHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0
YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYs
NyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2Up
OworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlz
Tm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBD
b25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5k
bGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRv
IGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0
dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3Rh
dHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3Rh
dHVzKSksCiAgICAgICAgICAgICBFZGdlKGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlk
YjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUx
ODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0y
NDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5kZTRm
MjNmYmFhMGM5NmRiYzhhYWM1MjQ5MTUzZjk4NmUzOThhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI4NjUsNyArMjg2NSw3IEBAIGNsYXNz
IEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIENQVUludHJpbnNpYzoK
ICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CmluZGV4IGE4NDA2OGU3NzQ2YzlkYzQzOTQxZTUxYzhlMzE1ZGE3MzVkZmUwZjMuLjBhYTgwZmYw
NjFhOTZiMGQ1MzVkNjA4ZjBhOTUwODc2MzhmODZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCkBAIC0zODUsOCArMzg1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250
ZXgKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+Z2V0QnlTdGF0dXMoKSk7CiAgICAg
aWYgKG5vZGUtPmhhc0luQnlTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9k
ZS0+aW5CeVN0YXR1cygpKTsKLSAgICBpZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChu
b2RlLT5oYXNQdXRCeVN0YXR1cygpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5w
dXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpLnRvUmF3KCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggOTEwY2YxMzk5
ZmM2YzlkYjFhN2M1NDRmYTFjYTk4YmQyM2NiM2M2OS4uMTJmMjlmMTA3MTU4YWZiMDBjNjU4YTZk
ZjQzOWE3OTE4NDJlODgwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKQEAgLTI1Miw2ICsyNTIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
c1dpdGhUaGlzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5
VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywg
bGlua0J1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIGxpbmtC
dWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIGxpbmtCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBsaW5rQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDk2YmZjNWEzMDM5YTM2MGZk
MTBhYTQwOTRmNTcwNjBhN2NkYTlhOTIuLjM2MTc0Nzc4MWZjZDZlNzkxNWU3YTI1OTY4NDY1ZDA3
YjY5MWIyOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
QEAgLTE5OSw2ICsxOTksMTEgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxw
ZXJzIHsKICAgICAgICAgbV9wdXRCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFB1
dEJ5VmFsKGNvbnN0IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9y
KiBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIG1fcHV0QnlWYWxzLmFwcGVuZChJbmxpbmVDYWNo
ZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKKyAgICB9CisK
ICAgICB2b2lkIGFkZERlbEJ5SWQoY29uc3QgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93
UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2RlbEJ5SWRzLmFwcGVu
ZChJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkp
OwpAQCAtMzYwLDYgKzM2NSw3IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVs
cGVycyB7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlWYWxzOwogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJZHM7
CisgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4sIDQ+
IG1fcHV0QnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdl
bmVyYXRvcj4sIDQ+IG1fZGVsQnlJZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxK
SVREZWxCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fZGVsQnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVD
YWNoZVdyYXBwZXI8SklUSW5CeUlkR2VuZXJhdG9yPiwgND4gbV9pbkJ5SWRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggZWM1YThmYjZlYWNlMjlkMzVlZDA1
N2NkNjRmMGQ2ZjQ2NDY2NGQwZi4uMmJkNGFlNDUzNTA0Y2Q2Yjc4ZDhkOTFlMjQ5YjIwZmE3MzBj
M2M4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMDYs
NyArMTA2LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBTdGF0ZVR5cGUmIHN0YXRlKQogICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZs
eToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggYWMyYjRiNWYwMjgzOWM4YWJhYTFkMzli
MzUxZDI3N2ExOWJkMWM5YS4uN2NhYTIwMjAxMmRjYTU4YmRiOTg2OTU4NjQ0NmEyNDhhNThlMzNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFy
aWFudC5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVC
cmFuZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlR5
cGVMb2NhdGlvbi5oIgpAQCAtOTIsNyArOTIsNyBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEg
ewogCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXI7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICBW
ZWN0b3I8UHV0QnlWYXJpYW50LCAyPiB2YXJpYW50czsKICAgICAKICAgICBib29sIHdyaXRlc1N0
cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwpA
QCAtMzIxMCwxNSArMzIxMCwxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxJbkJ5U3RhdHVzKj4oKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNQdXRCeUlk
U3RhdHVzKCkKKyAgICBib29sIGhhc1B1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IEZpbHRlclB1dEJ5SWRTdGF0dXM7CisgICAgICAgIHJldHVybiBvcCgpID09IEZp
bHRlclB1dEJ5U3RhdHVzOwogICAgIH0KICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRCeUlk
U3RhdHVzKCkKKyAgICBQdXRCeVN0YXR1cyogcHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGhhc1B1dEJ5SWRTdGF0dXMoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mby5hczxQ
dXRCeUlkU3RhdHVzKj4oKTsKKyAgICAgICAgQVNTRVJUKGhhc1B1dEJ5U3RhdHVzKCkpOworICAg
ICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlTdGF0dXMqPigpOwogICAgIH0KIAogICAgIGJv
b2wgaGFzRGVsZXRlQnlTdGF0dXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCmluZGV4IGU3NWJjZmU4YTFhYzM3MWEwMmU1NjU0OTZiOTg3OGQ5ODdlZTRhZDAuLjlhOTBh
NGNmZGFjOGYyMzUxODI4NzIyNGVkYmVlNWZkODlmNjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTU0Niw3ICs1NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJHZXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZpbHRlckluQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhGaWx0ZXJQdXRCeUlkU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oRmlsdGVyUHV0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0
ZXJEZWxldGVCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZk
NThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBj
YXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5
cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0
IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUg
aGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2
ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
PnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51
bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFj
ZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBA
QCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJl
Y2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFw
U2V0OgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5
YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICsz
NTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IGFiYzhkMThh
YTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUuLjVkYTA0Mzg3YjZkMGVlODk4NzQ4YzI5
ZWM3Nzg2NGZiYzkxZWIwZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5
NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1
MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApp
bmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3
NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1
dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZn
U2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4
IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMw
ZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5
Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAw
M2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEw
NDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToK
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBiMDAxZDEz
MmYwMmZmYzM4MjUzYzM4ZGYyZTQ5YjBjZjM2ZTYyZjY2Li5hNTQzODA5NjU4MGU0MmY3NTE1NDZk
MzU5YmNiMDQxMWRmZDQ4NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMg
ewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4
OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2Us
IDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAg
ICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07
KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAg
ICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBA
IGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3Nb
aV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRh
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZh
cmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2Jq
ZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5z
aXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50
cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2Vt
YW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5
ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5k
ZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24o
KS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
LT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09
IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4
NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBA
QCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2Rl
X3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgot
I2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2lu
Y2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAwYjRjMmI5YmUw
ZjVmZmYxNTFhM2IwN2U5YWEyNGZjY2Y5MDUwMzk4Li40MTE4NmRiZTk0MjA5NjI3MDBhNWI5NzY5
MTNmZjBhN2IyNGI3YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKQEAgLTEzNTcsNyArMTM1Nyw4IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1
YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAgIHZvaWQgdW5ib3hEb3VibGUoR1BSUmVn
IHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIEZQUlJlZyBmcHIsIEZQUlJlZyBzY3JhdGNoRlBS
KQogICAgIHsKLSAgICAgICAgbW92ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZw
ciwgc2NyYXRjaEZQUik7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoRlBSKTsKKyAgICAg
ICAgbW92ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwcik7CiAgICAgfQogICAg
IAogICAgIHZvaWQgYm94RG91YmxlKEZQUlJlZyBmcHIsIEpTVmFsdWVSZWdzIHJlZ3MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUw
MDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0
cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVs
ZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkg
XAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlk
U2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0
QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAg
ICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAg
ICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdp
dGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEz
NzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYx
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7
CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAw
OworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAg
bV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2
NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXpl
KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6
ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMu
c2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5z
aXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFu
Y2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0lu
ZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMs
IHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRo
aXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBw
YXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNo
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCmluZGV4IDRkYTdhMmZkNjZmMTUwY2ZjZDM1OTAyZmU5M2U1NGZlZDJh
NWFkMmUuLjBkZGRmZjQ5MmJhMzFiZmYwNGEwNTBiNzRiMzIxMmRhNjIxY2VmYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZh
dGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5t
X2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBq
aXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
LSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+
KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRL
aW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNzUsMTAgKzI1Myw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29t
cGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1
dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRy
LCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMTA4Myw2ICsxMDU3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7
CiAgICAgICAgIFZlY3RvcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNX
aXRoVGhpczsKICAgICAgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7
CisgICAgICAgIFZlY3RvcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAg
ICAgIFZlY3RvcjxKSVRJbkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9y
PEpJVEluQnlWYWxHZW5lcmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxC
eUlkR2VuZXJhdG9yPiBtX2RlbEJ5SWRzOwpAQCAtMTExMCw2ICsxMDg1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAg
ICAgICB1bnNpZ25lZCBtX3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2ln
bmVkIG1fcHV0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5C
eUlkSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7
IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFY
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCmluZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNm
NjQuLmE5MGM4NjlkMzk3OTk3NmM2ZmZhNmVkZDIzZmMzMjYzNDQyZjU5ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CkBAIC0xNDIsNyArMTQyLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNo
LCAKICAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJ
VEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIp
CisgICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2
YWx1ZSwgc3R1YkluZm9HUFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAg
ICAgLCBtX3B1dEtpbmQocHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjcgQEAgdm9pZCBKSVRH
ZXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZm
ZXImIHNsb3dQYXRoKQogICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZv
LT5zbG93UGF0aFN0YXJ0TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCisgICAg
OiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNj
ZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCisgICAg
LCBtX3B1dEtpbmQocHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwgbV92YWx1ZSh2
YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsK
KworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0
dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigpOworICAgIG1f
c3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8t
PnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5wcm9wZXJ0
eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklUUHV0QnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAg
ICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGppdC5jYWxs
KENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRv
cjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQor
eworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9z
dHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlvbl9HU3Np
SkpDIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAgICBzd2l0
Y2ggKG1fcHV0S2luZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICBp
ZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgaWYgKG1f
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmU6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICBBU1NF
UlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4g
cG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0
MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uMzA1YjcwZDNmOTJiMWZlM2I1YTY2
N2RiMzM0NGJiNjY3ZDZmYjQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9y
IHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBt
X2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAg
Q29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdz
IGJhc2UsCkBAIC0xNDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lK
SkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1v
ZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAg
IFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
cigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIHN0dWJJ
bmZvR1BSLCBFQ01BTW9kZSwgUHV0S2luZCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
bG93UGF0aEp1bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1w
Lm1fanVtcC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsK
KyAgICB9CisKKyAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZl
ciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworCisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBz
bG93UGF0aEZ1bmN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7
IEVDTUFNb2RlOjpzdHJpY3QoKSB9OworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNW
YWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA3NWRjN2MzNjlmMmFkM2ZhYjMyMGI4ZWI3OWZjN2Q3
NTNmNjgwOGY5Li40NGRiYTBlZDE1NTNhNjU0YTJmNGY3ZmZmZjBhZmIxOGYwMWY1YjQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTcxOSw3ICs3
MTksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzUxLDcgKzc1MSw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwg
aWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzgyLDcgKzc4Miw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwg
aWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywg
UHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5m
bywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC04MTMsNyArODEzLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlm
IChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBp
ZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFB1dFByaXZhdGVGaWVsZENhbGxiYWNrPgpAQCAtODg4LDcgKzg4OCw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemUsIHZvaWQsCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNz
VHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwog
CiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywg
b2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1
dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKICAgICB9
KTsKIH0KIApAQCAtOTI0LDE2ICs5MjQsMTUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEoKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJ
bmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50
aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOworICAgICAgICAgICAgcmVwYXRj
aFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUs
IGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOwogICAgIH0pOwogfQogCi1zdGF0aWMgdm9pZCBwdXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNW
YWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01B
TW9kZSBlY21hTW9kZSkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2
YWx1ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4
ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7CiAgICAg
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CkBAIC05NDIsNyArOTQxLDggQEAgc3RhdGljIHZv
aWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFs
dWUsIEpTVmFsdWUgc3UKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwor
ICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGdsb2Jh
bE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtOTUxLDMyICs5NTEsMzAgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChnbG9iYWxP
YmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIH0gCisgICAgfQorCiAgICAgaWYgKHN1YnNjcmlwdC5pc051bWJlcigpKSB7Ci0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9m
Qm91bmRzKCk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91
dE9mQm91bmRzKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAvLyBEb24ndCBwdXQgdG8g
YW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8g
JiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNj
cmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkp
OwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUs
IHNsb3QpOwogfQogCi1zdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpT
VmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkKK3N0
YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF5YmVJbmRleCA9
IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpbmRleCA9ICptYXliZUluZGV4
OwogCiAgICAgICAgIHN3aXRjaCAoYmFzZU9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTk4
OCw3ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAg
ICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRP
dXRPZkJvdW5kcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTAwMiwx
NSArMTAwMSwxMSBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
aW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZU9i
amVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwg
MCwgZWNtYU1vZGUuaXNTdHJpY3QoKSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXRE
aXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlk
KCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9i
amVjdCwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJl
Y3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHksIHZhbHVl
LCBzbG90KTsKQEAgLTEwMjMsMjI2ICsxMDE4LDIwNiBAQCBlbnVtIGNsYXNzIE9wdGltaXphdGlv
blJlc3VsdCB7CiAgICAgR2l2ZVVwLAogfTsKIAotc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0
cnlQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpT
VmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRCeVZhbE9wdGltaXpl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLQotICAgIC8vIFNlZSBpZiBp
dCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKLQogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNDb3B5
T25Xcml0ZShiYXNlVmFsdWUuZ2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSkKLSAgICAgICAg
cmV0dXJuIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotCi0gICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0KLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGlu
ZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAg
ICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVy
ZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJy
YXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CisgICAgICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01v
ZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBh
dGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5k
IHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRv
bid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJl
c3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVy
ZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgICAgICBpZiAoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAg
ICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7
CisgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9k
ZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgaWYgKGJh
c2VWYWx1ZS5pc09iamVjdCgpICYmIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRl
bnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsK
LSAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAh
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0
QnlWYWw+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6
Tm90RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2Vu
ZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJz
Y3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Q29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVl
KTsKKyAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJz
Y3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJD
YWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5
VmFsLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQg
IT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0ICE9
IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFrZSBz
bG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1
cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNl
cyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmplY3Rz
LCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRv
IG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgcHV0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBo
aWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcmVz
dWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49
IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogfQogCi1KU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmls
ZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0
ID0gdHJ5UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2Nr
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9S
RVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAg
ICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAg
ICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWMpOwotICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8s
IGVjbWFNb2RlKSk7CisKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywg
cHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotc3RhdGljIE9wdGltaXphdGlvblJl
c3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3Qq
IG9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewotICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
Ci0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1p
emF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90
T3B0aW1pemVkOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKIAorICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBw
cm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlw
dCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQorewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCgh
YnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAg
ICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0RGlyZWN0KGFycmF5TW9kZSkgJiYgYXJy
YXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7CisgICAgaWYgKCFpc0NvcHlPbldyaXRl
KGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CiAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLQotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgICAgICAgICAgICAg
IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAg
ICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBp
bnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1l
cy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6
Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQotICAg
ICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7
Ci0gICAgfSBlbHNlIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXApOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
ICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5
dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0
aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bERpcmVjdD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5k
OjpEaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5l
cmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
Q2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNj
cmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7
CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlz
U3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CisKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJl
Zm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0
RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworCisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworCisgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1
bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFr
ZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtl
IHN1cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBj
YXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmpl
Y3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVz
IHRvIG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1v
cnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUg
cmVzdWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50
ID49IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXA7Ci0gICAgfQorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0
UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9m
aWxlLCBlY21hTW9kZSkpOwogCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0KIAot
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9k
ZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwog
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQp
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0
cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
LSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAg
IC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAg
ICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIG9iamVjdCwgc3Vic2NyaXB0LCB2
YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlw
dCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJy
YXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICAKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJ
bmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChn
bG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21h
TW9kZSk7CisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZh
bChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNN
QU1vZGU6OnN0cmljdCgpKTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0
LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KIAotSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxl
KiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAK
KwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFs
dWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJz
Y3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgZGlyZWN0
UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZh
bHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGgg
PSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNl
VmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwor
fQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwor
CisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZh
bChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHBy
b2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5kKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggY2QzZTFiZDQxNGVjZDE3
MGJhNGEyNTU4OTM4ZjFlZDU0NDNhYjg5NS4uZDhmZDFlNzQ2NDI4MWU2ZWQwZTZjYzc0ZTM0Yzcw
MjVhYjdkNWFlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
QEAgLTIwMywxMCArMjAzLDE1IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJ
bmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUp
KTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5
VmFsSW5mbyosIEVDTUFNb2RlKSk7CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CiAKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBFQ01BTW9kZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiwgSlNH
bG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGQzOWJjNmQ3NTNkNjRkNmVmNzNhNzhh
NDVmOGI5ZjY1ODI1MzcyM2YuLmFmMmY4ZDI0Mzk0Y2RhNDg1NjI1NmViZjQ1YTljYTc1NGQ0NjEx
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCkBAIC00MzgsNjUgKzQzOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAg
ICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRL
aW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJ
c0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAgICBp
ZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIoZ2V0
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMyk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5j
aElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5
VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0g
ICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOwotICAgICAg
ICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlZSBj
b21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdU
MSwgcmVnVDEpOwotICAgIH0KICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QyLCBwcm9maWxlKTsKIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRo
aXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRl
eGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3Nl
QXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50
MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRU
eXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBi
eVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJh
ZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMyksIHJlZ1QyLCBlY21hTW9kZSwgcHV0S2luZCk7CisgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
LSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9wdXRCeVZh
bHMuYXBwZW5kKGdlbik7CisKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVj
ZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYxLDEyICs2MjcsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0
cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRv
IGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2Vj
bWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc0LDE2ICs2NDMsMTQgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgr
K107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0g
bGFiZWwoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZElt
bTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02OTQs
MjggKzY2MSwyNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJn
dW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRH
UFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9u
ID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8t
Pm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0g
Y2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTczNiwxOCArNzAxLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BS
ID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2Jq
ZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21h
TW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5
VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAg
ICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAg
ICAgICAgIGppdC5yZXQoKTsKIApAQCAtODA5LDEzICs3NzQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJ
bmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9
IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBi
eVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1
dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwpAQCAtODUxLDE0ICs4MTYsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50
R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAK
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGds
b2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAK
LSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIs
IGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsK
ICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkwLDgyICszMjU1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0g
ZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7
Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBu
ZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRB
cnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6
IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAg
ICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29t
ZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNo
ZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJn
ZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJU
KHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgp
KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2Zh
ckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0g
Y3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owot
ICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZm
ZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92
YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9
IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJv
dXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEo
KSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5m
by0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAg
YnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVK
dW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBm
dW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChK
SVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNw
ZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJ
bmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7
Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDcsNTMgKzMyOTYsNiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9w
X3B1dF9ieV92YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0KLSAgICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQo
Ynl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOwot
Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBi
eVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNl
cywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVt
cHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFs
SW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRl
IDogbV9uZWFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAg
ICB9Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsKLSAgICAg
ICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXplKHBh
dGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVy
LCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3
aXRoIGNhY2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVy
dHlOYW1lLnVpZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRh
KCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8tPnN0dWJJ
bmZvID0gZ2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFy
Z2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09w
ZXJhdGlvbiA9IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90SW5kZXhK
dW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0g
ICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0
cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0
aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4oQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7
Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxP
cFB1dEJ5VmFsRGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBD
YWNoZWFibGVJZGVudGlmaWVyKTsKLQogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVMb2Fk
KGNvbnN0IEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8pCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM3MDksNyArMzU1MSw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKICAgICBkb3Vi
bGVDYXNlLmxpbmsodGhpcyk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwg
bGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92
ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1Qx
KTsKKyAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVn
VDApOwogICAgIHJlYWR5LmxpbmsodGhpcyk7CiAjZW5kaWYKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDc1
ZDBiZDdmNmVmMzVjNzYyNzMxM2YyNmJhNjVhMTY4ZDgzYjk0NTYuLmI5OGJmZWNlZGFhNTU2MDFm
OTVhODhiZWRhNjFiMDlmMWEzNDM0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNTQ1LDcgKzU0NSw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29k
ZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKICAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKICAgICAgICAgbm90SW50
LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1QxLCBmcFJl
Z1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZw
UmVnVDApOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsK
ICAgICAgICAgcmVhZHkubGluayh0aGlzKTsKICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwg
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKaW5kZXggMzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAw
OTY0NC4uNGI3MWEwZmE5ZmQ5OTAzMTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJl
cGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKUwogICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNs
b3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3QpCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtp
bmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7
Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdDsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0
QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBw
eQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUo
Jm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQg
cHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAo
cHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAo
cHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1
dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBj
b21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNo
LCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtODE3LDEyICs4NTgsMTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFj
Y2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nh
c2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKICAgICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nh
c2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/
IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBX
VEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVt
cCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVt
cCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQu
Y29kZSgpKTsKIApAQCAtODM1LDEyICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
CiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0
QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0g
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2Fj
aGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2
ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBw
dXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAg
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGds
b2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBl
OworICAgICAgICBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0p
LT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
VWludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJ
bnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6
ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAg
IGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
U2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAg
ICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hh
cGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQz
MlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVT
aGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERv
dWJsZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRDb250aWd1b3VzU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1
YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01B
TW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRT
b21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdp
dGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNo
cG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUg
OiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0
ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3
ICsxMTIxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAg
ICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
IHsKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEs
NTUgQEAgdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRC
eUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2
b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVj
bHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rp
b25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlw
ZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKLSAgICBGdW5jdGlvblR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
KQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUo
Jm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9u
VHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+
KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUp
CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAg
IHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWlu
dGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgIH0KIAogICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0
YWJkNjM3M2MwYWMzNjI5ZDhlNi4uZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzlj
N2RlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBA
IGVudW0gY2xhc3MgR2V0QnlLaW5kIHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVt
IGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xh
c3MgRGVsQnlLaW5kIHsKICAgICBCeUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVu
dW0gY2xhc3MgSW5CeUtpbmQgewogCiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7
CiB2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0
ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJ
bkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3
YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlu
a1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0m
LCBDYWxsTGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRH
ZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJl
c2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1
dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVz
ZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lk
IHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZv
aWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5o
CmluZGV4IDdlZWE3NTg3MGU3YjE1Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5
MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMwNmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9y
IHRoZSBvcGNvZGUgbmFtZXMuIFRoaXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNv
ZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJl
Y2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3Rh
dHVzLmNwcCkKIC8vIHdoaWNoIHJlZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0
byBiZSBwcmVmaXhlZCB3aXRoICJsbGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0
aW9uLCB0aGUgMiBhcmUgZXF1aXZhbGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlh
cyBoZXJlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435804</attachid>
            <date>2021-08-18 15:15:38 -0700</date>
            <delta_ts>2021-08-18 16:33:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210818151537.patch</filename>
            <type>text/plain</type>
            <size>273986</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5lNjUxNDI3NTg1NTk0ZGY0
MDZkMzM5ZTg5ZjZiYzY4NzMxZjQ1YWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjEtMDgtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0
QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEtMDgtMTYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0IHVudXNlZCBMTEludCBvcGNvZGVzIGFy
ZSBub3QgaW5hZHZlcnRlbnRseSB1c2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4OThjLi5lYjBjMWM4NGJhMGZk
NjcwNGYzZjE4Y2JkODNmZmM4NTkwYjQzZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09i
amVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3RERE
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRS
ZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMz
MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2NywxMSArMjg2NywxMSBAQAogCQkwRjkzMzI5NDE0
Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRB
ODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQg
LyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEw
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04Njk4LDEwICs4Njk4LDEwIEBACiAJCQkJMEZE
M0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYx
NUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNE
MjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAg
Ki8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAq
LywKQEAgLTEwNTEwLDggKzEwNTEwLDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEg
LyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFF
NzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAz
MUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0
QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUz
MTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2Fz
ZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5j
cHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCmluZGV4IGRmODgzODZhODMyM2Q4NjkxMmNmZTUzNTMxZTNh
ODJkZmI0NGViOGUuLjkxMTdiYjg0NGM2MDdlYjVlNTIzM2ZiMzhhNDUyMjRiNDY3MzY0NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCkBAIC0xMDAxLDkgKzEwMDEsOCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB2b2lkIG1vdmVJbnRzVG9E
b3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXggMTQ0NWM3
OTFiMjhjZWY1ZGZjMTU2YzMxMjRjNmE0ZTIyMjFhYzFhNC4uNzRkMTI3NjI1YTc3YjUxMTY5YmFk
ZjlhZDM1YzdlODViMzUzOWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCkBAIC0yMDcyLDkgKzIwNzIsOCBAQCBjbGFz
cyBNYWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3Nl
bWJsZXI+IHsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0
ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAg
dm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBG
UFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAppbmRleCA4ZDAyMmUzYjgyNWY1OGQyZWY0ODgyMWIxYzJhOTQyNTY5MWQxYjQ5Li5hNjY5OTU5
NzA1NTBhOWFiNTFjZDI2ZDQ5MTk1NjY4ZjNiMGM5NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCkBAIC0xODMsMTQgKzE4
Myw2IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uIHsKICAgICAgICAgbW92ZUZsb2F0VG8zMihzcmMsIGRlc3QxKTsKICAgICB9CiAKLSAg
ICB2b2lkIG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIs
IEZQUmVnaXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKLSAgICB7Ci0gICAgICAg
IG1vdmUzMlRvRmxvYXQoc3JjMSwgZGVzdCk7Ci0gICAgICAgIG1vdmUzMlRvRmxvYXQoc3JjMiwg
c2NyYXRjaCk7Ci0gICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNo
KTsKLSAgICAgICAgb3JQYWNrZWQoc2NyYXRjaCwgZGVzdCk7Ci0gICAgfQotCiAgICAgSnVtcCBi
cmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm1fcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMz
NWI2Li5iMDQ1NGQxODAzM2EwMzM1ODkwNWM5ZGRmYjg3ZTExMzU0NDdjMWQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwx
OSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1
MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNv
bnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3Nywy
NCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3Vi
bGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAg
ICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZN
JiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgp
ID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtMTE5OSw5
ICsxMzAzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CkBAIC0xMjI3LDE2ICsxMzI4LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9m
Qm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGpp
dC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBp
c0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKQEAgLTEyNjIsMjEgKzEzNjMsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52
YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQu
YnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZEln
bm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAg
ICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwot
ICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUo
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gz
R1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzg3LDI1NCBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkg
JiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNv
dWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNo
ZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOworCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0
b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisjZW5kaWYKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90eXBl
ID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAgICAg
ICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlH
UFIsIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFu
Y2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3Rl
ZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091
dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBj
YXNlIEluZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0
byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0
ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsK
KyAgICAgICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogMzJiaXQKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlNjRUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3Rh
dGUuc2NyYXRjaEZQUikpOworICAgICAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKSk7CisgICAgICAgICAgICAg
ICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Vp
Z2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1pdHRlZCBp
biB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9maWxlCisgICAgICAgICAg
ICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAg
ICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0
b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVs
b3csIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAg
ICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0
KTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0
KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQor
ICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJv
ZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihz
Y3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
c3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9y
LmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAg
ICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdu
b3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOiB7Cisg
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0
dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhl
IHByb3BlcnR5LgorCisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlU
eXBlKG1fdHlwZSk7CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9w
ZXJ0eUdQUjsKKworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKSk7CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICAg
ICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5i
cmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNh
c2UgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hG
UFIpOworICAgICAgICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBk
b3VibGVDYXNlLmxpbmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRH
UFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKEFib3ZlLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAg
ICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5s
aW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNh
Z2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVu
ZDMyVG9QdHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlw
ZSkpIHsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91bmRzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCB2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAg
ICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikp
OworICAgICAgICAgICAgICAgIGppdC54b3IzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQu
anVtcCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICAgICAgaW5Cb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgY2FzZSAxOgor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6
VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2Fs
bEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUaW1lc1R3bykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJv
dW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsK
KyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRl
LnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0
Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNj
cmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBz
dGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxODMsNiArMjUy
MiwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8g
YmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFy
dCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9k
eSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAg
ICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIg
KzI1NDgsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAg
ICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVp
bnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIy
ODQsNiArMjY0NSwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vz
c0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNl
IEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0
YTk2MjExMDUwODk5YmFkZmQ5YmUuLjE4NjQ0YWQ1MTBmODBiYmQ5NzUxZjgzNjY3MGZmOTBhOTMx
MDg0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApA
QCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJM
b2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAg
ICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAg
ICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwK
KyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAg
ICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAK
ICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUzYjg0OTE3
YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0zNiw3ICsz
Niw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgR2V0
QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsKK2NsYXNz
IFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJQ1N0YXR1
cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAgICAgR2V0
QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBpblN0YXR1
cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07
CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxldGVCeVN0
YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEy
ZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDcxMzUxOWRiYTk0YjIxNGZjZTQ1
NzEwZDc2YjIxMjNhZmQ3MGI3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0xMDIyLDYgKzEwMjIsNDUgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZSkKICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOgogICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRTdHJpbmdMb2FkIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkRG91YmxlU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQ29udGlndW91c1N0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIklu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJp
bnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWZhYjlkMzljN2E0
ZWE2ZTYxY2Y1NjQ4YWVmYWM5MGMxZjdjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3Rz
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5o
IgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXR1
c1V0aWxzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1
czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLXsKLSAgICBy
ZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwotfQotCi12
b2lkIFB1dEJ5SWRTdGF0dXM6OnNocmlua1RvRml0KCkKLXsKLSAgICBtX3ZhcmlhbnRzLnNocmlu
a1RvRml0KCk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2Nr
LT52bSgpOwotICAgIAotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLQotICAgIC8vIFdlIGFyZSBu
b3QgeWV0IHVzaW5nIGBjb21wdXRlRnJvbUxMSW50YCBpbiBhbnkgcGxhY2UgZm9yIGBwdXRfcHJp
dmF0ZV9uYW1lYC4KLSAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMg
cmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKLSAgICAvLyBJQyBpbXBs
ZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQuCi0gICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BQdXRQcml2YXRlTmFtZT4oKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwotCi0gICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQg
PSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwotICAgIGlmICghc3RydWN0dXJlSUQpCi0gICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVy
ZUlEKTsKLQotICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdT
dHJ1Y3R1cmVJRDsKLSAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7Ci0gICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgIH0KLQotICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKLSAgICAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
Ci0gICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgewotICAgICAgICBjb25k
aXRpb25TZXQgPQotICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcg
ZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQot
ewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotI2lmIEVOQUJMRShERkdf
SklUKQotICAgIGlmIChkaWRFeGl0KQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAu
Z2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvOwotICAgIFB1dEJ5SWRTdGF0
dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIHN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4LCB1aWQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZSAvLyBFTkFCTEUo
SklUKQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2Vy
LCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSkpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhKQotewotICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86
OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOwotICAgIGlmICghaXNJbmxp
bmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzdW1tYXJ5KTsK
LSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgewotICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIAotICAgIGNhc2Ug
Q2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAg
ICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHVi
OwotICAgICAgICAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNl
JiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogewotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0KLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOwotICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVj
dHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlNldHRlcjogewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbXBs
ZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgp
LCB1aWQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxl
eEdldFN0YXR1cy5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OlNob3VsZFNraXA6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2Vz
U2xvd1BhdGg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3Mu
YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAq
Y2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNv
bXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7Ci0gICAg
ICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVl
U2V0dGVyOgotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRl
cjoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAg
ICB9Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxv
Y2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250
ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQotewotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJh
c2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNC
YWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgZm9y
IChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKLSAgICAgICAgSUNT
dGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOwotICAgICAgICAKLSAgICAg
ICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlJZFN0YXR1cyYgcmVzdWx0KSAtPiBQdXRC
eUlkU3RhdHVzIHsKLSAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmln
aW4pKSB7Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNv
bXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFw
LCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxF
eGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5zdHVi
SW5mbykgewotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRp
bWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0
ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGlt
aXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKLSAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVz
LnB1dFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5l
QmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsIGNhbGxFeGl0
U2l0ZURhdGEpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCkKLXsKLSAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICBpZiAoc2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKLSAgICAKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNl
dC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9i
YWxPYmplY3RUeXBlKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMp
OwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRl
TmFtZUJ5SWRgIGRlZmluZSBtb2RlCi0gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBh
cmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0
YWtlIAotICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KLSAgICAg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KLSAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCi0gICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAotICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCi0gICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNl
dCBtb2RlIGFuZCBpdAotICAgICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQotICAgICAgICAvLyB0cnlpbmcgdG8g
c3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQot
ICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBl
eGVjdXRlZC4KLSAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8v
IE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUg
d2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQotICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRv
IGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KLSAgICAKLSAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0
IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0
aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQotICAgICAgICAv
LyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCi0gICAg
ICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7Ci0g
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCB1aWQpOwotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwot
ICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMg
YWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KLSAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1
cmUsIHVpZCwgMCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIEFTU0VSVChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIAotICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJl
c3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQs
IG9mZnNldCkpOwotICAgICAgICBpZiAoIWRpZEFwcGVuZCkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0KLSAgICAKLSAgICByZXN1bHQuc2hy
aW5rVG9GaXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgUHV0QnlJ
ZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RhdGUgPT0gTWFrZXND
YWxscykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKG1fc3RhdGUgIT0gU2lt
cGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFr
ZXNDYWxscygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFr
ZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQg
UHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlk
U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpIHsKLSAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgUHV0QnlJZFN0YXR1czo6bWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYgb3RoZXIpCi17
Ci0gICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZdICgpIHsKLSAgICAgICAgKnRoaXMgPSBQ
dXRCeUlkU3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2Vz
Q2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLSAgICB9OwotICAgIAotICAgIHN3aXRjaCAobV9zdGF0
ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgaWYgKG90
aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIgOiBvdGhl
ci5tX3ZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgfQotICAgICAgICBz
aHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNT
bG93UGF0aDoKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIHJldHVybiBtZXJnZVNsb3co
KTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBQdXRCeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCi17Ci0g
ICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1cm47Ci0gICAgZmlsdGVySUNT
dGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1Jl
cGxhY2VJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAg
b3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgICAgICBvdXQucHJpbnQo
IihUYWtlc1Nsb3dQYXRoKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBNYWtlc0NhbGxz
OgotICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4ZTI1MmRiNjlhYzU3
MTNkYzhlOGY4YjY0NDAwMGNhZTYzMGIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiRXhpdEZsYWcuaCIKLSNpbmNsdWRlICJJ
Q1N0YXR1c01hcC5oIgotI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07Ci1jbGFzcyBKU0dsb2Jh
bE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIFN0cnVjdHVyZUNoYWluOwotY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87Ci0KLXR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOwotCi1j
bGFzcyBQdXRCeUlkU3RhdHVzIGZpbmFsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3
ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAv
LyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCi0gICAgICAgIFNp
bXBsZSwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KLSAg
ICAgICAgVGFrZXNTbG93UGF0aCwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhz
IHRoYXQgbWFrZSBjYWxscy4KLSAgICAgICAgTWFrZXNDYWxscwotICAgIH07Ci0gICAgCi0gICAg
UHV0QnlJZFN0YXR1cygpCi0gICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKLSAg
ICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdHVi
SW5mb1N1bW1hcnkgc3VtbWFyeSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgewot
ICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKLSAgICAgICAgICAg
IG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBj
YXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFy
eTo6TWFrZXNDYWxsczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtl
c1Nsb3dQYXRoOgotICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRo
QW5kTWFrZXNDYWxsczoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQpCi0gICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCi0gICAgewotICAgICAgICBt
X3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9v
bCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFw
JiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9y
aWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0jZW5kaWYKLSAgICAKLSAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICAKLSAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KLSAg
ICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KLSAg
ICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xv
d1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkg
Y29uc3Q7Ci0gICAgUHV0QnlJZFN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OwotICAgIAotICAg
IHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhbnRzOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KLSAgICBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFy
a0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2
b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKLSAgICAKLSAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKLSAgICAKLXByaXZhdGU6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJ
ZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0jZW5kaWYKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVj
b2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotICAgIAotICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsK
LSAgICAKLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4g
bV92YXJpYW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI0NTRkNjQ3ODJhOTY0MzkzMDlhZTlhMWZhMDQ4YTM4NzI1NTIxZjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50Lmgi
Ci0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIDogUHV0QnlJZFZhcmlhbnQoKQotewotICAg
ICp0aGlzID0gb3RoZXI7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBtX2tpbmQgPSBvdGhl
ci5tX2tpbmQ7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKLSAg
ICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uZGl0aW9u
U2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7Ci0gICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNl
dDsKLSAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgbV9jYWxsTGlua1N0
YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uo
Ci0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFJl
cGxhY2U7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3Vs
dC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Ci0gICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNl
dHRlcigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykK
LXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFNldHRl
cjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKLSAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cnVjdHVyZSogUHV0QnlJZFZhcmlhbnQ6Om9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKGtp
bmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5z
aXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVb
aV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RydWN0dXJlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmZp
eFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKGtpbmQoKSAhPSBU
cmFuc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9v
bGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
b2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX25ld1N0cnVjdHVyZSA9
IG51bGxwdHI7Ci0gICAgbV9raW5kID0gUmVwbGFjZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExp
bmtTdGF0dXMpOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6cmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Ci19Ci0K
LWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKLXsKLSAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBOb3RTZXQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJU
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKLSAgICAg
ICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KCp0aGlzKSkgewotICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2Fz
ZSBSZXBsYWNlOgotICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKG90aGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKLSAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVjdHVy
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICgh
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VkQ29uZGl0
aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBjYXNlIFNldHRl
cjogewotICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKLSAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtTdGF0
dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1l
cmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFtZXJnZWRD
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJh
c2VDb25kaXRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKQot
ewotICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7Ci0gICAgQVNTRVJUKHJlcGxhY2Uu
bV9raW5kID09IFJlcGxhY2UpOwotICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zm
c2V0KTsKLSAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKLSAgICBBU1NF
UlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOwotICAgIEFTU0VSVChyZXBsYWNlLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdp
bmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEg
bmV3IGZpZWxkIHdoaWNoCi0gICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUg
dGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAot
ICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSBy
ZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCi0gICAgCi0gICAgaWYgKHJlYWxsb2NhdGVzU3Rv
cmFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHJlcGxhY2UubV9v
bGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1
cmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgot
dm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0K
LQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQotewot
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
IChraW5kKCkpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOgotICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgb3V0
LnByaW50KAotICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCi0gICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAi
LCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOgotICAg
ICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRp
b25TZXQsIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwg
bV9vZmZzZXQpOwotICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3Rh
dHVzKTsKLSAgICAgICAgb3V0LnByaW50KCI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWE3M2EyZjhkNGI1ZTVmMGEx
ZGU0MDhhNWZiYmQxY2I3YWIyNTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
Q2FsbExpbmtTdGF0dXM7Ci0KLWNsYXNzIFB1dEJ5SWRWYXJpYW50IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIEtpbmQgewotICAgICAgICBOb3RTZXQs
Ci0gICAgICAgIFJlcGxhY2UsCi0gICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFNldHRlcgot
ICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoKQotICAgICAgICA6IG1fa2luZChOb3RT
ZXQpCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX25ld1N0
cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0KLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFj
ZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3Rh
dGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7Ci0gICAgCi0gICAgS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8
IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAg
fQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAot
ICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0
dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgICAg
IHJldHVybiBtX25ld1N0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhUcmFuc2l0
aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLQotICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygp
IGNvbnN0OwotICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBt
YWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0g
ICAgCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3
b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBo
ZWxwZXJzLgotICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJp
bnNpYzsgfQotCi0gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgot
ICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAgICB9Ci0gICAgCi0gICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7
Ci0gICAgfQotCi0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYg
b3RoZXIpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0
KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiByZXBsYWNlKTsKLSAgICAKLSAgICBLaW5kIG1fa2luZDsKLSAgICBQcm9wZXJ0eU9m
ZnNldCBtX29mZnNldDsKLSAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgU3Ry
dWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsKLSAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ2YmNjYTY3Y2YxODZjNDZiZGEwMzMwNmJhMDQzYzA0MGZhN2NhMDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCkBAIC0w
LDAgKzEsNTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCisK
KyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworYm9vbCBQdXRCeVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlh
bnQmIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3Zhcmlh
bnRzLCB2YXJpYW50KTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQoKQorewor
ICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsK
KyAgICAKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgY2FzZSBvcF9w
dXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAvLyBXZSBkbyBubyBoYXZlIGEgY29kZSByZXRyaWV2
aW5nIExMSW50IGluZm9ybWF0aW9uIGZvciBgb3BfcHV0X3ByaXZhdGVfbmFtZWAuCisgICAgICAg
IC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1
cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQorICAgICAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3Ig
dGhpcyBvcGVyYXRpb24gb24gTExJbnQuCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50aWZpZXIgPSAmKHByb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7
CisKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJl
SUQ7CisgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKKworICAgIFN0cnVjdHVyZUlEIG5l
d1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIW5ld1N0
cnVjdHVyZUlEKSB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
KQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBzdHJ1Y3R1
cmUsIG9mZnNldCk7CisgICAgfQorCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOworICAgIAorICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKCEoYnl0ZWNvZGUubV9m
bGFncy5pc0RpcmVjdCgpKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAg
ICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJl
LCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24obnVsbHB0ciwgc3RydWN0dXJlLCBuZXdTdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKK30KKworI2lmIEVOQUJMRShKSVQpCitQdXRC
eVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcg
ZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQor
eworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
KyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkaWRFeGl0KQor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5k
ZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1Yklu
Zm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIGNhbGxFeGl0U2l0
ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTElu
dChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURfUEFSQU0obWFwKTsKKyAgICBVTlVT
RURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwor
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorewor
ICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgYmFzZWxpbmVC
bG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0
ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5m
bzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7CisgICAgaWYgKCFpc0lu
bGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhzdW1tYXJ5KTsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgeworICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAKKyAgICBjYXNlIENh
Y2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKKyAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVp
ZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICBzdHViSW5m
by0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3Qg
PSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAo
YWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9s
eVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vz
cy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogeworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewor
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRC
eVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZpZXIoKSwgYWNjZXNzLnN0cnVjdHVy
ZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogeworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9
IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCksIGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
c3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
Q29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdl
dFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYXV0
byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3Ry
dWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRp
dGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1
c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhN
YWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgIH0K
K30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNl
bGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNr
JiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBDYWxs
TGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAg
ICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBi
eXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29u
dGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2Rl
T3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5
U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVzIHsKKyAgICAgICAgICAgIGlmICghY29udGV4
dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMg
YmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1
bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlu
bGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAgICAgICBQdXRCeVN0YXR1cyByZXN1bHQ7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNv
bnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVE
YXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gYmxlc3Mo
KnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY29tcHV0ZUZvcihi
YXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4
aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1
dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKKyAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgaWYgKHNldC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cygpOworICAgIAorICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1f
c3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7
ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RU
eXBlKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUg
YSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVm
aW5lIG1vZGUKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5n
IGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCisgICAgICAg
ICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgorICAgICAgICAgICAgaWYgKHBy
aXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNl
U2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQp
OworICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxp
ZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVh
dGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAg
ICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0
ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBv
bi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9t
IHRoZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBp
ZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4K
KyAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ug
c2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQg
PSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwgc3RydWN0dXJlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRo
IFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKKyAgICAgICAgLy8gc2hvdWxk
IG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBh
cmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRl
IGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4
Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisgICAgICAgIGlmIChwcml2YXRlRmll
bGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2lu
ZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5CisgICAg
ICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgorICAgIAorICAg
ICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgorICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJl
IGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZl
IHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0
aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2Jq
ZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkpOworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gV2Ugb25seSBvcHRp
bWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24g
aXMgY2FjaGVkIHRvLgorICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAg
ICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29u
Y3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAgICBpZiAoIXRyYW5z
aXRpb24pCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIAorICAgICAgICBib29s
IGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bihpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0
KSk7CisgICAgICAgIGlmICghZGlkQXBwZW5kKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAgICByZXN1bHQuc2hyaW5rVG9GaXQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK2Jvb2wgUHV0QnlTdGF0dXM6Om1h
a2VzQ2FsbHMoKSBjb25zdAoreworICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Ns
b3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQdXRCeVN0YXR1czo6c2luZ2xlSWRl
bnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmdsZUlkZW50aWZpZXJGb3JJQ1N0YXR1
cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0
QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZv
ciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JFR0FURShQdXRC
eVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVz
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQorewor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgeworICAgICAgICBp
ZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6bWVyZ2UoY29uc3Qg
UHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3Jt
YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAo
KSB7CisgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5t
YWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOworICAgIH07CisgICAg
CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAg
ICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2lt
cGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7CisgICAgICAgICAgICBpZiAoIWFwcGVu
ZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAg
ICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAg
IHJldHVybiBtZXJnZVNsb3coKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKKyAgICBmb3Ig
KFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQuZml4
VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgaWYgKG1fdmFyaWFudHMuaXNF
bXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKK30KKwordm9pZCBQdXRC
eVN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9z
dGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCIoTm9J
bmZvcm1hdGlvbikiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNpbXBs
ZToKKyAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgICAg
ICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMmExYzczYzhmNDFjYTE5MmU1OGQ0YmUx
ZGUxNjYxM2Q5MDAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJFeGl0RmxhZy5oIgorI2luY2x1ZGUg
IklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1
ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVk07CitjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0cnVjdHVyZUNoYWluOworY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOworCitj
bGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2Ug
aGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgLy8g
SXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgorICAgICAgICBTaW1w
bGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCisgICAg
ICAgIFRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBwYXRocyB0
aGF0IG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMKKyAgICB9OworICAgIAorICAgIFB1
dEJ5U3RhdHVzKCkKKyAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCisgICAgeworICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAg
OiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZv
cm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3R1YkluZm9TdW1t
YXJ5IHN1bW1hcnkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKKyAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgICAgICBtX3N0YXRl
ID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2Vz
Q2FsbHM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0
aDoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2Vz
Q2FsbHM6CisgICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQp
CisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAgeworICAgICAgICBtX3ZhcmlhbnRzLmFw
cGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1
dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBFeGl0RmxhZywg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNv
bXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKKyAgICAKKyAg
ICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smLCBDb2RlT3Jp
Z2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbik7CisjZW5kaWYKKyAgICAKKyAg
ICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICAKKyAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9CisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247
IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7
IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRh
a2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9CisgICAgYm9vbCBtYWtlc0Nh
bGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKKyAgICAK
KyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUo
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBQ
dXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNpbmdsZUlkZW50aWZpZXIoKSBjb25z
dDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFs
aXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeVN0YXR1cyYpOworICAg
IAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyNpZiBFTkFCTEUoSklU
KQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21w
dXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIGJvb2wg
YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICB2b2lkIHNocmlua1RvRml0
KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50LCAx
PiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNjM4NGFi
MWNlZWJhZjIxOGE0MDk5NjMzMjQ3MWUzZjEwMGE3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApAQCAtMCwwICsxLDMz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKworI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFu
dCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQoreworICAg
ICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVyYXRv
cj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tp
bmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBtX25l
d1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAg
ICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRlbnRp
ZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1dEJ5
VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAg
cmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50
IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJhbnNp
dGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVyKENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikp
OworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
ID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsK
KyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3Ry
dWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFjZTsK
KyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFyaWFu
dDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtpbmQo
KSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25z
dCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1faWRl
bnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5v
dFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAgICBB
U1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKKyAg
ICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBs
YWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlv
bldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRp
b246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlm
ICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VkQ29u
ZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNl
dHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8
IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtT
dGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0
Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFtZXJn
ZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xv
dEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAg
IAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExpbmtT
dGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAgICAg
IG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpCit7
CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFjZS5t
X2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZz
ZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFTU0VS
VCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2lu
ZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBu
ZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0
aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Cisg
ICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJl
cGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNTdG9y
YWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5tX29s
ZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVy
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
K30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQoreworICAg
IGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0
cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jYWxs
TGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjwi
KTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVtcHR5
PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAg
ICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgb3V0
LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0
KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIs
ICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6CisgICAg
ICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1
cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtTdGF0
dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBSZXBs
YWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAgIAor
ICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgICAg
IDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAg
ICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVyKFdU
Rk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlhbnQo
Y29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29uc3Qg
UHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAgIAor
ICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwg
a2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIHZv
aWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRp
dGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3Ig
U2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZv
ciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyBy
ZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVy
Lm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNl
dCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAgIEtp
bmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVyZVNl
dCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0
ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAgICBD
YWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcuLmZj
ZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYyLDEw
ICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVz
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0YXR1
cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewotICAg
IGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0YXR1
c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0dXMq
IHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdh
dGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZvciAo
YXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vjb25k
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5ODNk
YmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1
c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMqIGFk
ZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRkSW5C
eVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERlbGV0
ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgRGVs
ZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAg
ICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0
ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1cz4+
PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM+
Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNlYjIz
ZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3ODE5
ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2Nr
KiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRH
ZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJRChj
b2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQdXRC
eShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxvY2ss
ICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4ZTZl
MjUwMWFhYjE4ZTU1ZDQxYTQuLmUyMjU0MGMwOWJjNzgzZTdkOGUwNmQ1M2I3Y2E4MDg3MWVlNjcy
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFsLAot
ICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAgICBJ
bkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQxYzBi
NDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4MjEuLjA3YzJkMWYzNWRiMmY1OTQ2MWE0
OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcg
QEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1hdGhDb21t
b24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlB1dEJ5SWRT
dGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmlu
Z09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkK
ICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAg
ICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAo
dGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9i
YmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZh
bHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlW
YXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAh
PSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5k
KApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
ICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAgICAg
ICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBs
YWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJp
YW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UodGhpc1NldCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAsMTAgKzQxNDAsMTAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkg
JiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBpc0Rp
cmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8fCBub2RlLT5vcCgpID09IFB1dFBy
aXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8gcHJpdmF0ZUZpZWxkUHV0S2luZCA9IG5v
ZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9kZS0+cHJpdmF0ZUZpZWxkUHV0S2lu
ZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwotICAgICAgICAgICAgUHV0QnlJZFN0
YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0
QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAg
ICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAg
ICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgICAg
ICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICAgICAgaXNEaXJlY3Qs
IHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVl
OwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBU
cmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFu
dHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoQ29uZGl0aW9u
KGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFs
c2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJT
dHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVy
ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJl
cGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDczLDcgKzQ0NzMsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlcklu
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1MiwxMCArNDY1MiwxMCBAQCB2b2lkIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJJQ1N0YXR1cyhOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6IHsKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
aWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgICAgICBub2RlLT5wdXRC
eUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsK
KyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVy
ZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgxNWYxMjdlNzg1OWQ1YTkxNzNiLi42
ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2YjU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTEyNjUsNyArMTI2NSw3IEBA
IGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAg
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYzZTY4ZDAzN2ZlMTExMDFhZTQxMmEy
NzgyMjUzZjU5NDNiZDYyN2IuLjdmNDAyZTY5N2Y5ZGEwN2E0YzU1YWRhNTEyYzQ3OWRjNGYyMjM3
NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNp
bmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcgKzczLDcgQEAKICNpbmNsdWRlICJQcmVj
aXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5j
bHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1
ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIK
QEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICBib29sIGNo
ZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBjaGVja1ByZXNlbmNl
Rm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0
QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgLy8g
V29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5
VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KICAgICBOb2RlKiBs
b2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7Cisg
ICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0
QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI1MywxMyArMjUy
LDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2b2lkIGhhbmRsZUdldFByaXZhdGVO
YW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgK
LSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBj
b25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOworICAgICAgICBO
b2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5
U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0QnlJ
ZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLAogICAgICAgICBib29sIGlzRGly
ZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAgdm9pZCBo
YW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQ
dXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgICAgIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZh
bHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgdm9p
ZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24s
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00NTE0LDcgKzQ1MTMsNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZSBub3Qg
dG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAvLyB0aGUgc3RydWN0dXJlcyBpbiB0aGUg
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBi
ZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5IHJhcmUgaWYgdGhleSBkaWRuJ3QpLiBO
b3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nCi0gICAgICAg
ICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1
ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5SWRTdGF0dXMgd29yay4KKyAg
ICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBi
ZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlTdGF0dXMgd29yay4K
IAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdodCBub3csIGlmIHdlIGhhdmUgYW4gT1BD
Uywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0aGlzIHdpbGwKICAgICAgICAgICAgICAg
ICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlIGhhdmUgYSBoeWJy
aWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1OTIsOSBAQCBOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKLU5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBhcnNl
cjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJp
YW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJl
c2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwg
dmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7CiAgICAgcmV0dXJuIGhhbmRs
ZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsK
QEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5CeUlk
KFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGUKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYg
cHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgTm9k
ZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29u
c3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERp
cmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygp
ID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNt
YU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgocHV0QnlTdGF0dXMubWFr
ZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBP
cEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25z
dCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUlu
ZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgY29uc3QgUHV0QnlTdGF0
dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRl
eCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxl
KCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNz
SW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBp
ZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkg
fHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0
YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAg
ICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAx
KSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVz
Lm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewor
ICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXND
YWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxp
bmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRp
b25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewotICAgICAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlz
RGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50
cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsK
KyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0
YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlh
bnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJ
bmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpOyB2
YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBpZiAocHV0QnlTdGF0dXNbdmFyaWFu
dEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeVN0YXR1c1t2
YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0
UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBl
Y21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0
aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVk
UHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRv
R3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMp
KSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFy
aWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZv
ciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24p
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNl
dERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAg
ICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBk
YXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlk
ZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11
bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkg
PT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVz
WzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3
aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNl
OiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3Jh
cGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2Rl
T3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6
OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBzdG9yZShiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwxMiArNTA2NywxMiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKLSAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRT
dGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0
YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogeworICAg
ICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUs
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSks
IGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7Ci0g
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0
YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2Us
IGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01MTM1LDEyICs1MTM0LDEyIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpTZXR0ZXI6IHsKKyAg
ICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBw
dXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQo
U3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CiAgICAgICAg
IGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBp
c0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGVtaXRQdXRCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1v
ZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlT
dGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KIH0K
IAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJ
ZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQorICAgIGNv
bnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRl
RmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFw
dXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5n
KCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRC
eVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRp
b25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNT
ZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgYWRk
VG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHBy
aXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAg
ICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxs
cygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlm
ICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAg
ICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAg
ICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBv
bHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICB8fCBwdXRC
eVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxp
bmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVC
eUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFz
ZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MjExLDI5ICs1
MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgK
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAg
ICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAgICAgCi0g
ICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0
QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAg
Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3Rh
dHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVy
ZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBt
X2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52
YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFu
dHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zm
c2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAg
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBB
U1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZh
cmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlh
bnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogeworICAgIGNh
c2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQ
dXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMs
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3Rh
dHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0
aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNh
c2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmlu
ZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNl
KTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAg
ICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKQEAgLTY0NTQsNDAgKzY0
NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAg
ICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdp
bihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGlu
IHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAg
ICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4gRm9yIGBwdXRfcHJp
dmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8gZnJvbQotICAgICAgICAgICAgICAg
IC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwgdGhhdCB3ZSBjb3VsZCB1c2UgaWYg
QnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0gICAgICAgICAgICAgICAgaWYgKGJ5
VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAg
ICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFk
VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1
cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAg
ICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9u
ZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAgICAgICAgICAgICYmICFtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRD
b25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
c0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIFB1
dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9p
Y0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZp
ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRl
bnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNl
bGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENl
bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25z
dGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQs
IE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwg
cHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlm
aWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQp
OworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodHJ5Q29t
cGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVC
eUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
aWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5dGVjb2RlLm1fcHV0S2luZCksIGJh
c2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9w
cml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1NiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAg
ICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogCi0gICAg
ICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgcHV0QnlTdGF0dXMgPSBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1h
cCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigp
LCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5k
bGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCks
IGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIG5leHRPcGNv
ZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAgICAgaGFu
ZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQp
LCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGRpcmVjdCwgbmV4dE9wY29k
ZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTc5NzksMTMgKzc5NjgsMTMg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAg
ICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNl
T1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1czsKKyAgICAg
ICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAgICAgICAgICAgICAgICAgaWYgKHVpZCkK
LSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6
bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0
YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6OlRha2VzU2xvd1BhdGgpOwogICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxCi0gICAgICAgICAgICAgICAg
ICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAgICAg
ICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJlcGxh
Y2UKICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUoKSAh
PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNvZGUu
bV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRl
Y29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODgxOSw0NSAr
ODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBi
eXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQogICAgIE5vZGUqIHZhbHVlID0gZ2V0
KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBCeXRlY29kZTo6b3Bjb2Rl
SUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJZCA9
IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwot
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2RlT3Jp
Z2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwotICAg
ICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0
aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAgICAgLy8g
QXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIGlmIChi
eVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAg
ICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aAotICAgICAgICAgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAg
ICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBjb21w
aWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFs
SW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlm
aWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0
cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkp
OworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKworICAgICAgICBQdXRCeVN0YXR1cyBzdGF0
dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ss
IGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVp
ZCk7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAgICAg
ICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVy
LmNlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkp
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8o
ZnJvemVuKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXVpZC0+aXNTeW1ib2woKSk7CisgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBw
cm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHV0QnlJZFN0
YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAg
ICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAg
ICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVp
ZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
SWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7
CisgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7CiAgICAgICAgIH0KLQotICAg
ICAgICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBp
c0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2VjbWFNb2RlKTsKICAgICB9CiAKICAg
ICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThi
NGEuLjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3Im
IHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1l
bnRzOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNw
cAppbmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYw
ZWI1ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBA
QCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJ
ZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5C
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3
NTVmNDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0
YTQwYzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhh
c2UuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAg
ICAgICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OwogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0
ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMs
OSBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQ
dXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQu
b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFu
dDo6cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwg
dmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyAr
MTIxMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBj
aGlsZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikK
KyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5v
ZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0g
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikg
eworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNz
IENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29u
dmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAg
ICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAg
aWYgKGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNO
b25lLCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBA
QCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlm
ICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyks
CiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAg
ICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAg
IG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2
YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAt
MTQyNCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBU
cmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBm
b3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7Cisg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZv
bGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
KSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVs
ZFB1dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpKSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgog
CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5
SWRTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBF
ZGdlKGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4
ZjFlLi5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBk
b2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6
CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1
Y2YyZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5kZTRmMjNmYmFhMGM5NmRiYzhhYWM1MjQ5
MTUzZjk4NmUzOThhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKQEAgLTI4NjUsNyArMjg2NSw3IEBAIGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICBjYXNlIENQVUludHJpbnNpYzoKICAgICAgICAgY2FzZSBGaWx0ZXJD
YWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGE4NDA2OGU3NzQ2Yzlk
YzQzOTQxZTUxYzhlMzE1ZGE3MzVkZmUwZjMuLjBhYTgwZmYwNjFhOTZiMGQ1MzVkNjA4ZjBhOTUw
ODc2MzhmODZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0z
ODUsOCArMzg1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBj
aGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAqbm9kZS0+Z2V0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0luQnlTdGF0
dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+aW5CeVN0YXR1cygpKTsKLSAg
ICBpZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICpub2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChub2RlLT5oYXNQdXRCeVN0YXR1cygp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeVN0YXR1cygpKTsKICAgICBp
ZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpLnRvUmF3
KCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggOTEwY2YxMzk5ZmM2YzlkYjFhN2M1NDRmYTFjYTk4
YmQyM2NiM2M2OS4uMTJmMjlmMTA3MTU4YWZiMDBjNjU4YTZkZjQzOWE3OTE4NDJlODgwMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTI1Miw2
ICsyNTIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBsaW5rQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgbGlua0J1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgbGlua0J1ZmZlcik7CisgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZGVsQnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2luQnlJZHMsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCmluZGV4IDk2YmZjNWEzMDM5YTM2MGZkMTBhYTQwOTRmNTcwNjBhN2NkYTlh
OTIuLjM2MTc0Nzc4MWZjZDZlNzkxNWU3YTI1OTY4NDY1ZDA3YjY5MWIyOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAgLTE5OSw2ICsxOTksMTEgQEAg
Y2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICAgICAgbV9wdXRC
eUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+KGdlbiwg
c2xvd1BhdGgpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFB1dEJ5VmFsKGNvbnN0IEpJVFB1dEJ5
VmFsR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKKyAgICB7Cisg
ICAgICAgIG1fcHV0QnlWYWxzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxH
ZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKKyAgICB9CisKICAgICB2b2lkIGFkZERlbEJ5SWQo
Y29uc3QgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1Bh
dGgpCiAgICAgewogICAgICAgICBtX2RlbEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8
SklURGVsQnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwpAQCAtMzYwLDYgKzM2NSw3IEBA
IGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgVmVjdG9yPElu
bGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+LCA0PiBtX2dldEJ5
SWRzV2l0aFRoaXM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeVZhbEdl
bmVyYXRvcj4sIDQ+IG1fZ2V0QnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8
SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJZHM7CisgICAgVmVjdG9yPElubGluZUNh
Y2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlWYWxzOwogICAgIFZl
Y3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdlbmVyYXRvcj4sIDQ+IG1fZGVsQnlJ
ZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeVZhbEdlbmVyYXRvcj4s
IDQ+IG1fZGVsQnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUSW5CeUlk
R2VuZXJhdG9yPiwgND4gbV9pbkJ5SWRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKaW5kZXggZWM1YThmYjZlYWNlMjlkMzVlZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQwZi4u
MmJkNGFlNDUzNTA0Y2Q2Yjc4ZDhkOTFlMjQ5YjIwZmE3MzBjM2M4YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRXhpdE1vZGUg
bWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBTdGF0ZVR5cGUmIHN0YXRlKQog
ICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICBjYXNlIEZpbHRlckNh
bGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0
ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKaW5kZXggYWMyYjRiNWYwMjgzOWM4YWJhYTFkMzliMzUxZDI3N2ExOWJkMWM5YS4uN2Nh
YTIwMjAxMmRjYTU4YmRiOTg2OTU4NjQ0NmEyNDhhNThlMzNkMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVG
aWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgorI2luY2x1ZGUgIlB1
dEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFZhcmlhbnQuaCIKICNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgpAQCAtOTIs
NyArOTIsNyBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogCiBzdHJ1Y3QgTXVsdGlQdXRC
eU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50LCAy
PiB2YXJpYW50czsKICAgICAKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAg
ICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwpAQCAtMzIxMCwxNSArMzIxMCwxNSBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxJbkJ5U3RhdHVzKj4o
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNQdXRCeUlkU3RhdHVzKCkKKyAgICBib29sIGhh
c1B1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEZpbHRlclB1dEJ5
SWRTdGF0dXM7CisgICAgICAgIHJldHVybiBvcCgpID09IEZpbHRlclB1dEJ5U3RhdHVzOwogICAg
IH0KICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRCeUlkU3RhdHVzKCkKKyAgICBQdXRCeVN0
YXR1cyogcHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1B1dEJ5SWRTdGF0
dXMoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mby5hczxQdXRCeUlkU3RhdHVzKj4oKTsKKyAg
ICAgICAgQVNTRVJUKGhhc1B1dEJ5U3RhdHVzKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8u
YXM8UHV0QnlTdGF0dXMqPigpOwogICAgIH0KIAogICAgIGJvb2wgaGFzRGVsZXRlQnlTdGF0dXMo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IGU3NWJjZmU4YTFh
YzM3MWEwMmU1NjU0OTZiOTg3OGQ5ODdlZTRhZDAuLjlhOTBhNGNmZGFjOGYyMzUxODI4NzIyNGVk
YmVlNWZkODlmNjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
QEAgLTU0Niw3ICs1NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhGaWx0ZXJHZXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRl
ckluQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGaWx0ZXJQdXRCeUlk
U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRmlsdGVyUHV0QnlTdGF0dXMs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJEZWxldGVCeVN0YXR1cywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2
Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2
ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAg
LTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1
NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2Rl
cyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5z
IHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBz
aW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1
c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJp
YW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1
cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0
LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBt
X2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVz
OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
aW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4
NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
QEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5k
ZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYz
MjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IGFiYzhkMThhYTM5NzY0YTJmOWMwYzA3NDFjZmQx
ZTlhNThkZGM0MjUuLjVkYTA0Mzg3YjZkMGVlODk4NzQ4YzI5ZWM3Nzg2NGZiYzkxZWIwZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBj
YXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJh
bmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEwYTRj
Li5jOGZjMTU3NDE1OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTU4NzEs
NyArNTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAx
MDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQy
NGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApA
QCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4
YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4
YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFl
NjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3
YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBiMDAxZDEzMmYwMmZmYzM4MjUzYzM4ZGYyZTQ5
YjBjZjM2ZTYyZjY2Li5hNTQzODA5NjU4MGU0MmY3NTE1NDZkMzU5YmNiMDQxMWRmZDQ4NjA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0x
NjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4OTUxLDcgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFu
dCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRk
KHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJp
YW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAg
ICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAg
ICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGlu
ZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9
IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9u
b2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFu
dC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgp
KTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemls
eSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVy
KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHko
dmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5
cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJl
KCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wu
cmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5
NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRl
Y29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAj
aW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0
dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5o
IgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAwYjRjMmI5YmUwZjVmZmYxNTFhM2IwN2U5YWEyNGZj
Y2Y5MDUwMzk4Li40MTE4NmRiZTk0MjA5NjI3MDBhNWI5NzY5MTNmZjBhN2IyNGI3YWE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNTcsNyAr
MTM1Nyw4IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7
CiAgICAgfQogICAgIHZvaWQgdW5ib3hEb3VibGUoR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxv
YWRHUFIsIEZQUlJlZyBmcHIsIEZQUlJlZyBzY3JhdGNoRlBSKQogICAgIHsKLSAgICAgICAgbW92
ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwciwgc2NyYXRjaEZQUik7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoRlBSKTsKKyAgICAgICAgbW92ZUludHNUb0RvdWJsZShw
YXlsb2FkR1BSLCB0YWdHUFIsIGZwcik7CiAgICAgfQogICAgIAogICAgIHZvaWQgYm94RG91Ymxl
KEZQUlJlZyBmcHIsIEpTVmFsdWVSZWdzIHJlZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNi
MzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFj
cm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAg
bWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUp
IFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRS
ZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFj
cm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisg
ICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRj
aCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VX
aXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFj
cm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUw
ZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRl
eCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwog
ICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4
ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRo
VGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5k
QWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4
IDRkYTdhMmZkNjZmMTUwY2ZjZDM1OTAyZmU5M2U1NGZlZDJhNWFkMmUuLjBkZGRmZjQ5MmJhMzFi
ZmYwNGEwNTBiNzRiMzIxMmRhNjIxY2VmYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAt
MjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURp
cmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0
UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNzUsMTAgKzI1Myw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVm
Zm9ydCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklU
QXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbElu
Zm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50
aWZpZXIpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhD
YWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVy
KTsKIApAQCAtMTA4Myw2ICsxMDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICAgICAgVmVj
dG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAgICAgIFZlY3RvcjxKSVRQ
dXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRJbkJ5SWRH
ZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlWYWxHZW5lcmF0b3I+
IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2VuZXJhdG9yPiBtX2RlbEJ5
SWRzOwpAQCAtMTExMCw2ICsxMDg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2ln
bmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0
QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5
SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlWYWxJbmRleCB7
IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5kZXggeyBVSU5UX01BWCB9
OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAg
IHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmluZGV4IDY5
YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLmE5MGM4NjlkMzk3OTk3NmM2
ZmZhNmVkZDIzZmMzMjYzNDQyZjU5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAg
SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNo
ZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAgICBFQ01BTW9kZSBlY21h
TW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJs
b2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0LCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgICAgIDogSklUQnlJZEdl
bmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NU
eXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCiAg
ICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQocHV0S2lu
ZCkKIHsKQEAgLTM4MSw2ICszODEsNjcgQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Zmlu
YWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQogICAgICAg
ICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRp
b247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFN
b2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCisgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0
VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVy
cykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCisgICAgLCBtX3B1dEtpbmQocHV0S2luZCkK
KyAgICAsIG1fYmFzZShiYXNlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJ
bmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKworICAgIG1fc3R1YkluZm8tPmJh
c2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5yZWdzLnByb3BlcnR5
R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0g
dmFsdWUucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIgPSBzdHVi
SW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIG1fc3R1YkluZm8tPmJhc2VUYWdH
UFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8tPnZhbHVlVGFnR1BSID0gdmFsdWUu
dGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5wcm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRh
Z0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgfSBlbHNlCisgICAgICAgIG1f
c2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICBtX2RvbmUgPSBqaXQubGFi
ZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZl
ciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQoreworICAgIEJhc2U6OmZpbmFsaXpl
KGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0
clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkK
KyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFy
dExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAgICBzd2l0Y2ggKG1fcHV0S2luZCkgeworICAg
IGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmlj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgaWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7
CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgIEFT
U0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmlj
dCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShj
b2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUs
IHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNm
ZjQ3YzhhMjc4ZjdmYi4uMzA1YjcwZDNmOTJiMWZlM2I1YTY2N2RiMzM0NGJiNjY3ZDZmYjQ2YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJ
ZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpz
dHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0Owog
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwg
Q29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0
MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRH
ZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigp
OwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9l
Y21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwog
fTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigpID0gZGVmYXVsdDsKKworICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVy
dHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSwgUHV0
S2luZCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1NldCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1Bh
dGhMaW5rQnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYpOworCisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CisK
K3ByaXZhdGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9
OworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAg
IEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKK307
CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7
CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApp
bmRleCA3NWRjN2MzNjlmMmFkM2ZhYjMyMGI4ZWI3OWZjN2Q3NTNmNjgwOGY5Li40NGRiYTBlZDE1
NTNhNjU0YTJmNGY3ZmZmZjBhZmIxOGYwMWY1YjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTcxOSw3ICs3MTksNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAg
ICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0
cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3Qp
OworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0Nh
Y2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzUxLDcgKzc1MSw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2Jh
bE9iamVjCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVj
dHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QpOwor
ICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwg
UHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0Nh
Y2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzgyLDcgKzc4Miw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1
Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAg
ICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQ
dXRLaW5kOjpEaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2Fj
aGVhYmxlSWRlbnRpZmllcikpCkBAIC04MTMsNyArODEzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJD
YWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAg
cmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVj
dHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAg
ICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0
cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1
dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFB1dFByaXZhdGVGaWVsZENh
bGxiYWNrPgpAQCAtODg4LDcgKzg4OCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZvaWQsCiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBpZGVudGlm
aWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5m
bywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKKyAgICAgICAgICAgIHJlcGF0
Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJl
LCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKICAgICB9KTsKIH0KIApAQCAtOTI0LDE2ICs5
MjQsMTUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEoKICAgICAgICAgQVNTRVJUX1VOVVNFRChh
Y2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdC
eSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAg
cmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0
cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQpOwogICAgIH0pOwogfQogCi1zdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFs
dWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkKK3N0YXRp
YyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFz
VWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
CiAgICAgICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7CiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CkBAIC05NDIsNyArOTQxLDggQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5
UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVj
bWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTUxLDMyICs5NTEs
MzAgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21h
TW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0gCisgICAgfQorCiAgICAg
aWYgKHN1YnNjcmlwdC5pc051bWJlcigpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQ
YXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAg
ICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgIGlm
IChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkK
KyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXko
Z2xvYmFsT2JqZWN0KTsKICAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5n
IHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlm
aWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5j
YWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQ
YXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJ
bmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogfQogCi1zdGF0aWMg
dm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkKK3N0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5
VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBK
U1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAo
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF5YmVJbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1Vp
bnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICB1aW50MzJfdCBpbmRleCA9ICptYXliZUluZGV4OwogCiAgICAgICAgIHN3aXRjaCAo
YmFzZU9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTk4OCw3ICs5ODYsOCBAQCBzdGF0aWMg
dm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogYmFzZU9iamVjdCwgSgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgRkFM
TFRIUk9VR0g7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5
UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUp
CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTAwMiwxNSArMTAwMSwxMSBAQCBzdGF0aWMg
dm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogYmFzZU9iamVjdCwgSgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5KSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRo
cm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChieVZhbEluZm8tPnN0dWJJ
bmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChz
dWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkpKQotICAg
ICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgZWNtYU1vZGUuaXNTdHJp
Y3QoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2Jh
bE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKQEAgLTEwMjMsMjI2
ICsxMDE4LDIwNiBAQCBlbnVtIGNsYXNzIE9wdGltaXphdGlvblJlc3VsdCB7CiAgICAgR2l2ZVVw
LAogfTsKIAotc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9wdGltaXplKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBwdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKLQotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcg
YXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKLQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNDb3B5T25Xcml0ZShiYXNlVmFsdWUuZ2V0
T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuIE9wdGltaXphdGlvblJl
c3VsdDo6R2l2ZVVwOwotCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlw
dC5pc0ludDMyKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7Ci0KLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5
dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUp
OwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
OwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAg
ICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUg
IT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbElu
Zm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKGxv
Y2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkOworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBK
U09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmICgh
aXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0Lmlz
SW50MzIoKSkgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hp
bmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHJvZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBhdGNoQXJyYXlQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsICpzdHViSW5mbywgUHV0
S2luZDo6Tm90RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3Qg
dGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAx
MCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygp
KQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXA7Ci0gICAgfQorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFi
bGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAg
ICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CisgICAgICAgICAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxv
Y2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYm
IENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0
KSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50
b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKLSAgICAgICAgaWYgKHN1YnNjcmlw
dC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsK
LSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KHZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6Tm90RGlyZWN0LCBieVZhbEluZm8t
PmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0
aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mg
c2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBieVZh
bEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hl
ZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2Vs
bCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmln
aW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBi
YXNlT2JqZWN0LT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OworCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAg
ICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9j
aywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFB1
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRp
Zmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpOb3REaXJl
Y3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0
OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6
U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEw
IHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKLSAgICAgICAgLy8gbmV2
ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWlu
ZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJh
dGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUKLSAgICAgICAgLy8g
dGhhdCB0aGUgcHV0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQ
YXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcmVzdWx0IGlzIEdpdmVVcC4KLSAgICAg
ICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwKQotICAgICAgICAgICAgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBw
cm9maWxlLCBlY21hTW9kZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0ID0gdHJ5UHV0QnlWYWxPcHRpbWl6
ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlw
dCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBP
cHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0
byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAg
ICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpOwotICAgIH0K
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisKKyAgICBw
dXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKIH0KIAotc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIG9iamVjdCwgSlNWYWx1ZSBzdWJz
Y3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBB
cnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgLy8gU2VlIGlmIGl0J3Mg
d29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAorICAgIHB1
dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNl
VmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xv
cHB5KCkpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2Rl
IGVjbWFNb2RlKQorewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoc3Vic2NyaXB0Lmlz
SW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0g
Qnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKIAotICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09w
dGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0
byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJh
eU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1v
ZGVQZXJtaXRzUHV0RGlyZWN0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+
YXJyYXlNb2RlKSB7CisgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5n
TW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpIHsKKyAg
ICAgICAgICAgIGlmIChwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZv
LT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9j
aywgc3RydWN0dXJlKTsKLQotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5
VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJh
eU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlv
blJlc3VsdDo6T3B0aW1pemVkOworICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QsIGVj
bWFNb2RlKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8g
cGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0
LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGlt
aXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3Qt
PnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfSBlbHNlIGlmIChDYWNo
ZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsK
KyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChz
dWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAoc3Vic2NyaXB0Lmlz
U3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNT
RVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAg
ICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlm
IChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNo
ZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpj
b21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4odm0sIGNvZGVCbG9j
aywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpEaXJlY3QsIGJ5VmFsSW5mby0+
Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBz
aXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRp
b25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFs
SW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVk
SWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxs
KCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRp
b25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CisgICAgICAgICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+
cHV0QnlJZENvbnRleHQoKSk7CisKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Q29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVl
KTsKKyAgICAgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBn
bG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworCisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgICAg
ICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+
YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQor
ICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5k
OjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3Vs
dDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFu
IDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKLSAgICAgICAgLy8g
bmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9u
LWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0
ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUKLSAgICAgICAg
Ly8gdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuIFdlIGNvdW50IHVwIHNs
b3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcmVzdWx0IGlzIEdpdmVVcC4KLSAg
ICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwKQotICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBiYXNlT2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogCi0g
ICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJv
bG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChiYXNl
VmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlEaXJlY3RQdXRCeVZhbE9wdGlt
aXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9iamVjdCwgc3Vic2NyaXB0
LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9w
dGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRv
IG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAg
ICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJp
Yyk7Ci0gICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZh
bChnbG9iYWxPYmplY3QsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21h
TW9kZSkpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBw
cm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKKworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKworICAgIGRp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9k
ZTo6c2xvcHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0K
IAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VW
YWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1
YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZh
bChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNN
QU1vZGU6OnNsb3BweSgpKTsKK30KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKKwogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBSRUxFQVNFX0FTU0VS
VChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFN
b2RlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgZGlyZWN0
UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZh
bHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworCisgICAgc3R1YkluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2Jq
ZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9w
cHkoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5kKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgKaW5kZXggY2QzZTFiZDQxNGVjZDE3MGJhNGEyNTU4OTM4ZjFlZDU0NDNh
Yjg5NS4uZDhmZDFlNzQ2NDI4MWU2ZWQwZTZjYzc0ZTM0YzcwMjVhYjdkNWFlZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTIwMywxMCArMjAzLDE1IEBA
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwg
UHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZh
dGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbElu
Zm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7
CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUq
KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikp
OworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJv
ZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJh
eVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJh
eVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVBy
b2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJh
eVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
LCBBcnJheVByb2ZpbGUqKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
Q2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBF
Q01BTW9kZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwg
U2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlu
a0luZm8qKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCmluZGV4IGQzOWJjNmQ3NTNkNjRkNmVmNzNhNzhhNDVmOGI5ZjY1ODI1MzcyM2YuLmFm
MmY4ZDI0Mzk0Y2RhNDg1NjI1NmViZjQ1YTljYTc1NGQ0NjExMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC00MzgsNjUgKzQzOCwz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2Rl
IGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBz
dGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRL
aW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5
VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlz
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRl
Z2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHBy
b3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBQYXRjaGFi
bGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQp
IHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAg
ICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9ub3RJbmRleEp1
bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0ludDMyLmxp
bmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub3RJbmRleCA9IGVtaXRQ
YXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uobm90
SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlZSBjb21tZW50IGluIG9wX2dldF9ieV92
YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwotICAgIH0KICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsK
IAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0K
LSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgaW5saW5lPwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldy
aXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1Qy
KTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwot
ICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRD
b250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMyks
IHJlZ1QyLCBlY21hTW9kZSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CisKKyAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJy
aWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtNjYxLDEyICs2MjcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwog
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRl
Y29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGly
ZWN0KQpAQCAtNjc0LDE2ICs2NDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBl
bHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsK
IAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkp
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02OTQsMjggKzY2MSwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8UwogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1l
bnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3Vt
ZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVj
bWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2Zp
bGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
CiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlz
RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGlt
aXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xv
d1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTczNiwxOCAr
NzAxLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIz
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihn
bG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9H
UFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
aml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChBZGRy
ZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsKIApA
QCAtODA5LDEzICs3NzQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQ
UiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1l
bnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BSKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUxLDE0ICs4
MTYsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVj
dEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2lu
ZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZh
dGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2
YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCkBAIC0zMjkwLDgyICszMjU1LDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50
aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVhYmwK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQot
ICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2gg
KGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0Zv
cldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJp
ZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsK
LSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJy
YXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBCaWdJ
bnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAg
ICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlw
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJs
b2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVkc0xp
bmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9m
YXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQ
dHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5v
cGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsK
LSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIo
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRy
VGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVz
cy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBieVZh
bEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAg
ICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRh
Z2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdl
dCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVy
YXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRk
cmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0
QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1
bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0v
LyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZh
bmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZh
bD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5w
dHIoKTsKQEAgLTM0MDcsNTMgKzMyOTYsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQ
cml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQQogICAg
IH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYg
T3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRL
aW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWwpKTsKLSAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0KLSAgICBKdW1wTGlzdCBk
b25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnl0ZWNvZGUsIHB1dEtpbmQsIHBy
b3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOwotCi0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5kb25lVGFy
Z2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCi0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxl
cik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9uZWFyQ2FsbHMpIHsKLSAg
ICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxl
ZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUu
Y2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXplKHBhdGNoQnVmZmVyLCBwYXRjaEJ1ZmZl
cik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNhY2hlZCBwcm9wZXJ0eSBu
YW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChwdXRLaW5kID09IFB1dEtp
bmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1lLnVpZCgpLT51dGY4KCku
ZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50
YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7
Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IHB1dEtpbmQgPT0g
UHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRk
cmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5j
dGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRP
cGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNp
YWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0PihCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsK
LQogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVMb2FkKGNvbnN0IEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKQEAgLTM3MDksNyArMzU1MSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
CiAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKICAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7CiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNj
cmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxKTsKKyAgICBtb3ZlSW50c1RvRG91
YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDApOwogICAgIHJlYWR5Lmxpbmso
dGhpcyk7CiAjZW5kaWYKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDc1ZDBiZDdmNmVmMzVjNzYyNzMxM2Yy
NmJhNjVhMTY4ZDgzYjk0NTYuLmI5OGJmZWNlZGFhNTU2MDFmOTVhODhiZWRhNjFiMDlmMWEzNDM0
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcApAQCAtNTQ1LDcgKzU0NSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAg
SnVtcCByZWFkeSA9IGp1bXAoKTsKICAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAg
IG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1QxLCBmcFJlZ1QwLCBmcFJlZ1QxKTsKKyAgICAg
ICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwogICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKICAgICAgICAgcmVhZHkubGluayh0
aGlzKTsKICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXgg
MzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5OTAz
MTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwogICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkg
LT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAg
ICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3
aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9
CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0
dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtp
bmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgsMTIg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgCiAg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6
IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAog
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1LDEy
ICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
LXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2
b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1
dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7Cisg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFw
KTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAg
ICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNUeXBl
ZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBl
ZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmln
VWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0Ogor
ICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGlu
Z1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGlu
Z1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNo
YXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShs
b2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxw
dHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRy
KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9
CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFN
b2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAKIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNs
b3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVs
QnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlk
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdElu
QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdldEJ5
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5
S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtp
bmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdl
dChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlv
blR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rp
b247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAg
ICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQo
Y29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9
IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVu
Y3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9u
VHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQor
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KIAog
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVu
Y3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpC
eVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAg
ICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhlNi4u
ZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlLaW5k
IHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7Cisg
ICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAgICBC
eUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQgewog
CiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBy
ZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEFy
cmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9p
ZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1
Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxldGVC
eShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFs
dWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
RGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5k
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZv
aWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
T2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0
dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwg
Q2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJh
bmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3YjE1
Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMw
NmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8v
IFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMuIFRo
aXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0
dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAo
ZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNoIHJl
ZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRoICJs
bGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1aXZh
bGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435816</attachid>
            <date>2021-08-18 16:33:38 -0700</date>
            <delta_ts>2021-08-18 19:27:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210818163337.patch</filename>
            <type>text/plain</type>
            <size>274672</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5lNjUxNDI3NTg1NTk0ZGY0
MDZkMzM5ZTg5ZjZiYzY4NzMxZjQ1YWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjEtMDgtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0
QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEtMDgtMTYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0IHVudXNlZCBMTEludCBvcGNvZGVzIGFy
ZSBub3QgaW5hZHZlcnRlbnRseSB1c2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4OThjLi5lYjBjMWM4NGJhMGZk
NjcwNGYzZjE4Y2JkODNmZmM4NTkwYjQzZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09i
amVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3RERE
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRS
ZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMz
MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2NywxMSArMjg2NywxMSBAQAogCQkwRjkzMzI5NDE0
Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRB
ODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQg
LyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEw
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04Njk4LDEwICs4Njk4LDEwIEBACiAJCQkJMEZE
M0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYx
NUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNE
MjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAg
Ki8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAq
LywKQEAgLTEwNTEwLDggKzEwNTEwLDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEg
LyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFF
NzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAz
MUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0
QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUz
MTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2Fz
ZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5j
cHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCmluZGV4IGRmODgzODZhODMyM2Q4NjkxMmNmZTUzNTMxZTNh
ODJkZmI0NGViOGUuLjkxMTdiYjg0NGM2MDdlYjVlNTIzM2ZiMzhhNDUyMjRiNDY3MzY0NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCkBAIC0xMDAxLDkgKzEwMDEsOCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB2b2lkIG1vdmVJbnRzVG9E
b3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXggMTQ0NWM3
OTFiMjhjZWY1ZGZjMTU2YzMxMjRjNmE0ZTIyMjFhYzFhNC4uNzRkMTI3NjI1YTc3YjUxMTY5YmFk
ZjlhZDM1YzdlODViMzUzOWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCkBAIC0yMDcyLDkgKzIwNzIsOCBAQCBjbGFz
cyBNYWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3Nl
bWJsZXI+IHsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0
ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAg
dm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBG
UFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAppbmRleCA4ZDAyMmUzYjgyNWY1OGQyZWY0ODgyMWIxYzJhOTQyNTY5MWQxYjQ5Li5hNjY5OTU5
NzA1NTBhOWFiNTFjZDI2ZDQ5MTk1NjY4ZjNiMGM5NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCkBAIC0xODMsMTQgKzE4
Myw2IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uIHsKICAgICAgICAgbW92ZUZsb2F0VG8zMihzcmMsIGRlc3QxKTsKICAgICB9CiAKLSAg
ICB2b2lkIG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIs
IEZQUmVnaXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKLSAgICB7Ci0gICAgICAg
IG1vdmUzMlRvRmxvYXQoc3JjMSwgZGVzdCk7Ci0gICAgICAgIG1vdmUzMlRvRmxvYXQoc3JjMiwg
c2NyYXRjaCk7Ci0gICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNo
KTsKLSAgICAgICAgb3JQYWNrZWQoc2NyYXRjaCwgZGVzdCk7Ci0gICAgfQotCiAgICAgSnVtcCBi
cmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm1fcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMz
NWI2Li4wMGI1ZWQyNGJiYWY1OTdkMDM4NDZmYmE0ZjhkOWE3MmU1ZmJlZTljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwx
OSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1
MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNv
bnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3Nywy
NCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3Vi
bGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAg
ICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZN
JiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgp
ID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtMTE5OSw5
ICsxMzAzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CkBAIC0xMjI3LDE2ICsxMzI4LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9m
Qm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGpp
dC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBp
c0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKQEAgLTEyNjIsMjEgKzEzNjMsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52
YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQu
YnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZEln
bm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAg
ICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwot
ICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUo
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gz
R1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzg3LDI2NyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkg
JiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNv
dWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNo
ZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOworCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0
b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisjZW5kaWYKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90eXBl
ID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAgICAg
ICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlH
UFIsIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFu
Y2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3Rl
ZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091
dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJ
bnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAg
ICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRU
b0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsK
KyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIo
KSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0
ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1
ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRk
ZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmUpIHsKICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0
KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBQcm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LmJyYW5j
aDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQorICAgICAgICAgICAg
Ly8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAg
ICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVn
aXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOiB7CisgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhh
dCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5Lgor
CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7
CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKwor
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKSk7
CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQorICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKHZhbHVlUmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIg
IT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNhc2UgPSBqaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAg
ICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBkb3VibGVDYXNlLmxp
bmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKHNjcmF0Y2hHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vsc2UKKyAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihBYm92ZSwgdmFsdWVS
ZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAg
ICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVS
ZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAgICAgcmVh
ZHkubGluaygmaml0KTsKKyAgICAgICAgfQorCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1
ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7
CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkKKyAg
ICAgICAgICAgIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2Vy
dmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoCisg
ICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNl
OjpOb0V4dHJhU3BhY2UpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6
OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsK
KworICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQo
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoM0dQUik7Cisg
ICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkJlbG93T3JFcXVhbCwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
ZmYpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRvb0JpZyA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkdyZWF0ZXJUaGFuLCBzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMHhmZikpOworICAgICAgICAgICAgICAgIGppdC54b3IzMihzY3JhdGNoM0dQUiwgc2NyYXRj
aDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gY2xhbXBlZCA9IGppdC5qdW1wKCk7CisgICAg
ICAgICAgICAgICAgdG9vQmlnLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAg
ICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaW5Cb3VuZHMubGlu
aygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHNjcmF0Y2gzR1BSLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc09uZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2Fs
bEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAy
OgorICAgICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzVHdvKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc091dE9m
Qm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGlzRW1wdHkp
OworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAg
IHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAg
ICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3RhdGUuc2NyYXRjaEZQUiwgc3Rh
dGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc3RhdGUuc2Ny
YXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoc3RhdGUu
c2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAg
IHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE4Myw2ICsy
NTM1LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVja1ByaXZhdGVCcmFuZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgLy8gVGhlc2UgbmVlZCB0
byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBpcyBw
YXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBzdXJlIHRoYXQgbm9i
b2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBzaW5jZSB0aGV5CiAg
ICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tzLgpAQCAtMjE5Niwy
MiArMjU2MSwzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNlOjp0b1R5cGVkQXJyYXlUeXBl
KEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3Rv
cmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKICAg
ICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMy
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0
dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBl
VWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0
MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsK
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MjI4NCw2ICsyNjU4LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVTaGFyZWQoY29uc3QgQWNj
ZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1w
ZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNh
c2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNDE5Yzk5YzkwZjQzOTAxODAx
ZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uMTg2NDRhZDUxMGY4MGJiZDk3NTFmODM2NjcwZmY5MGE5
MzEwODQzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5o
CkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2UgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQsCiAgICAgICAgIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkCisg
ICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRleGVkSW50MzJTdG9yZSwKKyAg
ICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRleGVkQ29udGlndW91c1N0b3Jl
LAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUsCisgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUsCiAgICAgfTsK
IAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdhZDBkZjg4MjExMDdmZTNiODQ5
MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcyYjRkYzJhMWQxODkyMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKQEAgLTM2LDcg
KzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBH
ZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQdXRCeUlkU3RhdHVzOworY2xh
c3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsKIGNsYXNzIFN0cnVjdHVyZVN0
dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IElDU3Rh
dHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBH
ZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEluQnlTdGF0dXMqIGluU3Rh
dHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIg
fTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIERlbGV0ZUJ5
U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA4MTA0
YTJmMzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40NzEzNTE5ZGJhOTRiMjE0ZmNl
NDU3MTBkNzZiMjEyM2FmZDcwYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTEwMjIsNiArMTAyMiw0NSBAQCB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlw
ZSB0eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgICAg
IG91dC5wcmludCgiSW5kZXhlZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5k
ZXhlZEludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGln
dW91c1N0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUlu
dDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91dC5w
cmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgICAg
IG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6Cisg
ICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQzOWM3
YTRlYTZlNjFjZjU2NDhhZWZhYzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVz
LmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3Rh
dHVzVXRpbHMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1
ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlkU3Rh
dHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewotICAg
IHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19Ci0K
LXZvaWQgUHV0QnlJZFN0YXR1czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMuc2hy
aW5rVG9GaXQoKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJv
bUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxv
Y2stPnZtKCk7Ci0gICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2UgYXJl
IG5vdCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1dF9w
cml2YXRlX25hbWVgLgotICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBp
cyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElDIGlt
cGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWluc3Ry
dWN0aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJ
RCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkKLSAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0
dXJlSUQpOwotCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25l
d1N0cnVjdHVyZUlEOwotICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAg
ICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3Ry
dWN0dXJlSUQpOwotICAgIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3Jt
YXRpb24pOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKLSAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAgIGNv
bmRpdGlvblNldCA9Ci0gICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3Jt
YXRpb24pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCi0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNl
dCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0Rmxh
ZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEp
Ci17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwotICAgIAotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFS
QU0oYnl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgaWYgKGRpZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1h
cC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJZFN0
YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJvZmls
ZWRCbG9jaywgc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVOQUJM
RShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQp
OwotICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1QdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2Nr
ZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpKSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0
ZURhdGEpCi17Ci0gICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5m
bzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFpc0lu
bGluZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1hcnkp
OwotICAgIAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2FzZSBD
YWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVk
IHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAgY2Fz
ZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkgewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9m
ZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6
U3R1YjogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0
dWI7Ci0gICAgICAgIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgcmVz
dWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nh
c2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94
eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAg
ICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENv
bmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3Ry
dWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBh
Y2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ29t
cGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0
ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0
KCksIHVpZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChjb21w
bGV4R2V0U3RhdHVzLmtpbmQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0
YXR1czo6U2hvdWxkU2tpcDoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFr
ZXNTbG93UGF0aDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vz
cy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
ICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0
QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
Y29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAg
ICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFs
dWVTZXR0ZXI6Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0
dGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwot
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgIH0KLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVC
bG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0Nv
bnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEo
YmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhh
c0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAgICBm
b3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAgICBJ
Q1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAotICAg
ICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+IFB1
dEJ5SWRTdGF0dXMgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9y
aWdpbikpIHsKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0g
Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVN
YXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVz
dWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnN0
dWJJbmZvKSB7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9w
dGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21w
dXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0
aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0
dXMucHV0U3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxp
bmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2FsbEV4
aXRTaXRlRGF0YSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCBwcml2YXRlRmllbGRQdXRLaW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChzZXQu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAg
ICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2V0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ld
OwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEds
b2JhbE9iamVjdFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKLQotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0gICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRl
cyk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIC8v
IFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZh
dGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdl
IGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRv
IHRha2UgCi0gICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgotICAg
ICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVl
KQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0g
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBX
YXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJl
cGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlz
IGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNo
cG9pbnQgc2V0LgotICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMg
cHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAgICAg
ICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRo
ZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAgLy8g
SklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRv
IGhhdmUgYSBsYXp5IHRoaW5neS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZl
IHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5h
cHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4g
c2V0IG1vZGUgYW5kIGl0Ci0gICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWluZyB0
byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtl
Ci0gICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRz
IGV4ZWN1dGVkLgotICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAg
Ly8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9y
ZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdhbnQg
dG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNoZSBw
dXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xv
d1BhdGgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29t
ZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAgICAg
IC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KLSAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNEaXJl
Y3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsK
LSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBp
cyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgot
ICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVj
dHVyZSwgdWlkLCAwLCBvZmZzZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNTRVJU
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5kID0g
cmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNl
dCwgb2Zmc2V0KSk7Ci0gICAgICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3VsdC5z
aHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQdXRC
eUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBNYWtl
c0NhbGxzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAhPSBT
aW1wbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5t
YWtlc0NhbGxzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJz
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAg
IHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJ
ZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9p
ZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5
SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50IDogbV92YXJpYW50cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0p
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBQdXRCeUlkU3RhdHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhlcikK
LXsKLSAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhpcyA9
IFB1dEJ5SWRTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFr
ZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoIChtX3N0
YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVyOwot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBpZiAo
b3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7
Ci0gICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6IG90
aGVyLm1fdmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAgICAg
IHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtl
c1Nsb3dQYXRoOgotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdlU2xv
dygpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci12b2lkIFB1dEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKLXsK
LSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0ZXJJ
Q1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRv
UmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQotICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0g
ICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9u
KSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAg
ICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5wcmlu
dCgiKFRha2VzU2xvd1BhdGgpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2VzQ2Fs
bHM6Ci0gICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2OWFj
NTcxM2RjOGU4ZjhiNjQ0MDAwY2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1ZGUg
IklDU3RhdHVzTWFwLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpTR2xv
YmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7Ci0K
LWNsYXNzIFB1dEJ5SWRTdGF0dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNv
IHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAgICAg
IC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAgICAg
U2ltcGxlLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgot
ICAgICAgICBUYWtlc1Nsb3dQYXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0
aHMgdGhhdCBtYWtlIGNhbGxzLgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAKLSAg
ICBQdXRCeUlkU3RhdHVzKCkKLSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQot
ICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9
PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09
IE1ha2VzQ2FsbHMpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0
dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7
Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAgICAg
ICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1t
YXJ5OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRh
a2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1Bh
dGhBbmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCkKLSAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAgICAg
IG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0
QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJ
bmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpF
eGl0U2l0ZURhdGEpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBi
b29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMgUHV0
QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNN
YXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2Rl
T3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAg
c3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBD
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAgIFN0
YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQot
ICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQot
ICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNT
bG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2FsbHMo
KSBjb25zdDsKLSAgICBQdXRCeUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAgCi0g
ICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAg
IHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRpZgot
ICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0
ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBhcHBl
bmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgp
OwotICAgIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAx
PiBtX3ZhcmlhbnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjQ1NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFmMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQu
aCIKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGluZXMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudChj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17Ci0g
ICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50Ojpv
cGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9IG90
aGVyLm1fa2luZDsKLSAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwot
ICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25kaXRp
b25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zm
c2V0OwotICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxMaW5r
U3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0
dXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0gICAg
cmV0dXJuICp0aGlzOwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZSgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0g
UmVwbGFjZTsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBU
cmFuc2l0aW9uOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAg
ICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6
c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVz
KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gU2V0
dGVyOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OwotICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1
cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6
b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQo
a2luZCgpID09IFRyYW5zaXRpb24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJl
LnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVy
ZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6
Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgpICE9
IFRyYW5zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCht
X29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRT
dHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1
cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0dXJl
ID0gbnVsbHB0cjsKLSAgICBtX2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0ID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxs
TGlua1N0YXR1cyk7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMo
KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgot
ICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpyZWFs
bG9jYXRlc1N0b3JhZ2UoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2Fz
ZSBUcmFuc2l0aW9uOgotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50
OjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKLX0K
LQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKQotewotICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5vdFNl
dDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBBU1NF
UlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5t
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX29s
ZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlv
bjogewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwotICAg
ICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxh
Y2UoKnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgY2Fz
ZSBUcmFuc2l0aW9uOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBj
YXNlIFJlcGxhY2U6Ci0gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9u
V2l0aFJlcGxhY2Uob3RoZXIpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlv
bjogewotICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0
dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRDb25k
aXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0
dGVyOiB7Ci0gICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwg
b3RoZXIubV9jYWxsTGlua1N0YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0
YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQu
bWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1lcmdl
ZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90
QmFzZUNvbmRpdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlua1N0
YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAgICAg
bV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2Up
Ci17Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVwbGFj
ZS5tX2tpbmQgPT0gUmVwbGFjZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9v
ZmZzZXQpOwotICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAgIEFT
U0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxhY2Uu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2YgbWVy
Z2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQg
YSBuZXcgZmllbGQgd2hpY2gKLSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGls
ZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0
Ci0gICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhl
IHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0ZXNT
dG9yYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFjZS5t
X29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVj
dHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwot
fQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNs
b3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCi17
Ci0gICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1f
bmV3U3RydWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRp
b25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICht
X2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkVmFy
aWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQo
b3V0LCBudWxscHRyKTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxlbXB0
eT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAg
ICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBv
dXQucHJpbnQoCi0gICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRl
eHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIs
ICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6Ci0g
ICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRp
dGlvblNldCwgY29udGV4dCksICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAi
LCBtX29mZnNldCk7Ci0gICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwotICAgICAgICBvdXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVlNWYw
YTFkZTQwOGE1ZmJiZDFjYjdhYjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBDYWxsTGlua1N0YXR1czsKLQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5vdFNl
dCwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0dGVy
Ci0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5kKE5v
dFNldCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fbmV3
U3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFyaWFu
dChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBs
YWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0
JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBz
dGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
LCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAotICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAg
ICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBS
ZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAg
Ci0gICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBT
ZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRT
dHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICAg
ICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRyYW5z
aXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVz
KCkgY29uc3Q7Ci0gICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0K
LSAgICAKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0
IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVk
IGhlbHBlcnMuCi0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50
cmluc2ljOyB9Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMu
Ci0gICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChp
c1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBDYWxs
TGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQo
KTsKLSAgICB9Ci0KLSAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVT
ZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHJlcGxhY2UpOwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OwotICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAgICBT
dHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDZiY2NhNjdjZjE4NmM0NmJkYTAzMzA2YmEwNDNjMDQwZmE3Y2EwMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKQEAg
LTAsMCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIK
KworI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitib29sIFB1dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFy
aWFudCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFy
aWFudHMsIHZhcmlhbnQpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgpCit7
CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgp
OworICAgIAorICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6
CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNlIG9w
X3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJldHJp
ZXZpbmcgTExJbnQgaW5mb3JtYXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAgICAg
ICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1
dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVkIGZv
ciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnRpZmllciA9ICYocHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwo
KTsKKworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1
cmVJRDsKKyAgICBpZiAoIXN0cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
Tm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlSUQg
bmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICghbmV3
U3RydWN0dXJlSUQpIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisgICAg
QVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0
ZWQoKSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29kZS5t
X2ZsYWdzLmlzRGlyZWN0KCkpKSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAg
ICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisg
ICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1
cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5ld1N0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0Rmxh
ZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEp
Cit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2sp
OworICAgIAorICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKKyAgICBVTlVTRURfUEFS
QU0oYnl0ZWNvZGVJbmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGRpZEV4aXQp
CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJ
bmRleCkpLnN0dWJJbmZvOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHVi
SW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgY2FsbEV4aXRT
aXRlRGF0YSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxM
SW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShtYXApOworICAgIFVO
VVNFRF9QQVJBTShkaWRFeGl0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7
CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7
CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBiYXNlbGlu
ZUJsb2NrLCBzdHViSW5mbywKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0
ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKK30KKwor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRT
aXRlRGF0YSkKK3sKKyAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJ
bmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKKyAgICBpZiAoIWlz
SW5saW5lYWJsZShzdW1tYXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKHN1bW1hcnkp
OworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7CisgICAgY2FzZSBD
YWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVk
IHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgIAorICAgIGNhc2Ug
Q2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAgICAgIHN0dWJJ
bmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwor
ICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlz
dCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAgICBQdXRCeVN0YXR1cyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGlm
IChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
SlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQ
b2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9
IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUsIG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7
CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gYWNjZXNzLm5ld1N0cnVj
dHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25T
ZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJl
VmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1
dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRlbnRpZmllcigpLCBhY2Nlc3Muc3RydWN0
dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVz
ID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRp
b25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtT
dGF0dXM+KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBh
dXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigpLCBz
dHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29u
ZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAg
fQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJh
c2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3Rh
Y2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwor
ICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBj
b250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNv
ZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0
QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0dXMgeworICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1
cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIGJhc2Vs
aW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LAorICAgICAgICAg
ICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICBiYXNlbGluZVJl
c3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9t
SW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAgICAgIGxvY2tlciwg
Y29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0
ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBibGVz
cygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb21wdXRlRm9y
KGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxs
RXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxk
UHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQoreworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQorICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQu
bV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUo
KTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAg
ICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVj
dFR5cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisK
KyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAg
aWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2
ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBk
ZWZpbmUgbW9kZQorICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5p
bmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAgICAg
ICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBpZiAo
cHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFu
dCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdp
dGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAgICAgICAvLyBzaG91
bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdl
IGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZh
dGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cg
ZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAgaWYgKHByaXZhdGVG
aWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRv
aW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKKyAg
ICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCisgICAgCisg
ICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1
cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdp
dmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3Bl
cnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNP
YmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxk
UHV0S2luZC5pc05vbmUoKSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5IG9w
dGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlv
biBpcyBjYWNoZWQgdG8uCisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAg
ICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICghdHJh
bnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAgIGJv
b2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFuc2l0
aW9uKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZz
ZXQpKTsKKyAgICAgICAgaWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtUb0Zp
dCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1czo6
bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxscygp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2Vz
U2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVzOjpzaW5nbGVJ
ZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmllckZvcklDU3Rh
dHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
Zm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50
LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFB1
dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQdXRCeVZhcmlh
bnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChBYnN0
cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCit7
CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAgICAg
IGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjptZXJnZShjb25z
dCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZv
cm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZd
ICgpIHsKKyAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVy
Lm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CisgICAgfTsKKyAg
ICAKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAg
ICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBT
aW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgICAg
IHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgUHV0QnlW
YXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAgICAgICAgICAgIGlmICghYXBw
ZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwor
ICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAg
ICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0
dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1
cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOworICAgIGZv
ciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5m
aXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJpYW50cy5p
c0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2b2lkIFB1
dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoICht
X3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQoIihO
b0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2lt
cGxlOgorICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAg
ICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyYTFjNzNjOGY0MWNhMTkyZTU4ZDRi
ZTFkZTE2NjEzZDkwMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgiCisjaW5jbHVk
ZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5j
bHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2NsYXNzIEpTR2xv
YmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hhaW47CitjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7CisK
K2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3
ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAorICAgICAgICAv
LyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisgICAgICAgIFNp
bXBsZSwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAg
ICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhz
IHRoYXQgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscworICAgIH07CisgICAgCisgICAg
UHV0QnlTdGF0dXMoKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAg
ICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0lu
Zm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2Vz
Q2FsbHMpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdHViSW5mb1N1
bW1hcnkgc3VtbWFyeSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAgICAg
ICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgICAgIG1fc3Rh
dGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgorICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFr
ZXNDYWxsczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQ
YXRoOgorICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFr
ZXNDYWxsczoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIAorICAgIFB1dEJ5U3RhdHVzKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFu
dCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFudHMu
YXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29t
cHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFn
LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMg
Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAgIAor
ICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYsIENvZGVP
cmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0
ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxp
bmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luKTsKKyNlbmRpZgorICAgIAor
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlv
bjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBs
ZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
VGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBib29sIG1ha2Vz
Q2FsbHMoKSBjb25zdDsKKyAgICBQdXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OworICAg
IAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6
ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgYXQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xlSWRlbnRpZmllcigpIGNv
bnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wgZmlu
YWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJik7Cisg
ICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorI2lmIEVOQUJMRShK
SVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNv
bXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgYm9v
bCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIHZvaWQgc2hyaW5rVG9G
aXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzA2Mzg0
YWIxY2VlYmFmMjE4YTQwOTk2MzMyNDcxZTNmMTAwYTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCkBAIC0wLDAgKzEs
MzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorCisjaW5j
bHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworUHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJp
YW50JiBvdGhlcikKKyAgICA6IFB1dEJ5VmFyaWFudChvdGhlci5tX2lkZW50aWZpZXIpCit7Cisg
ICAgKnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlWYXJpYW50JiBQdXRCeVZhcmlhbnQ6Om9wZXJh
dG9yPShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIG1fa2luZCA9IG90aGVyLm1f
a2luZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOworICAgIG1f
bmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CisgICAgbV9jb25kaXRpb25TZXQg
PSBvdGhlci5tX2NvbmRpdGlvblNldDsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0Owor
ICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVz
ID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgbV9pZGVu
dGlmaWVyID0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIHJldHVybiAqdGhpczsKK30KKworUHV0
QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAg
ICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeVZhcmlh
bnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFu
c2l0aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICBy
ZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0
aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpzZXR0ZXIo
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzKQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVy
KSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9jYWxsTGlua1N0
YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1N0cnVjdHVyZSogUHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9
IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIFB1dEJ5VmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBtX2tpbmQgPSBSZXBsYWNl
OworICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Cit9CisKK2Jvb2wgUHV0QnlWYXJp
YW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHJldHVybiBvbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2Jvb2wgUHV0QnlWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4ga2lu
ZCgpID09IFNldHRlcjsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNv
bnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEh
b3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9p
ZGVudGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2Ug
Tm90U2V0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBzd2l0
Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgICAg
IEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKG90
aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFu
c2l0aW9uOiB7CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwor
ICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJl
cGxhY2UoKnRoaXMpKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAg
ICBjYXNlIFJlcGxhY2U6CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0
aW9uV2l0aFJlcGxhY2Uob3RoZXIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogeworICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3Ry
dWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtZXJnZWRD
b25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9u
U2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
U2V0dGVyOiB7CisgICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMg
fHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgeworICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlu
a1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2NvbmRpdGlvblNl
dC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25T
ZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIW1l
cmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICAgICAgbV9jYWxsTGlu
a1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICAKKyAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRU
b01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSkK
K3sKKyAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOworICAgIEFTU0VSVChyZXBsYWNl
Lm1fa2luZCA9PSBSZXBsYWNlKTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29m
ZnNldCk7CisgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7CisgICAgQVNT
RVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAgICBBU1NFUlQocmVwbGFjZS5j
b25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoaXMgc29ydCBvZiBtZXJn
aW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBh
IG5ldyBmaWVsZCB3aGljaAorICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxl
IHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QK
KyAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUg
cmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgorICAgIAorICAgIGlmIChyZWFsbG9jYXRlc1N0
b3JhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXBsYWNlLm1f
b2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0
dXJlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklO
RV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChtX25l
d1N0cnVjdHVyZSkKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RT
bG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNs
b3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCit7Cisg
ICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3
U3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRpb25T
ZXQuYXJlU3RpbGxMaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwg
bnVsbHB0cik7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
PCIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciwgIicsICIpOworICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiZW1w
dHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOgorICAg
ICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiUmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBv
dXQucHJpbnQoCisgICAgICAgICAgICAiVHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRl
eHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4
dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwg
IiwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldHRlcjoKKyAg
ICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRp
b25TZXQsIGNvbnRleHQpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwg
bV9vZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3Rh
dHVzKTsKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MTQwMmI0MjU2YWRlN2UwNTY1MGE5ZmYwZjY4NDVlYzFiMzFlYjRhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFy
aWFudC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua1N0
YXR1czsKKworY2xhc3MgUHV0QnlWYXJpYW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBOb3RTZXQsCisgICAgICAgIFJl
cGxhY2UsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNldHRlcgorICAgIH07CisgICAg
CisgICAgUHV0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICAg
ICAgOiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisg
ICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX2lkZW50aWZpZXIo
V1RGTW92ZShpZGVudGlmaWVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1dEJ5VmFyaWFu
dChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yPShjb25z
dCBQdXRCeVZhcmlhbnQmKTsKKworICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgcmVwbGFjZShDYWNo
ZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCB0cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7
CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCBzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmll
ciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CisgICAg
CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRT
dHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0
dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8
fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJu
IG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7
CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8
fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCisgICAgeworICAgICAg
ICByZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNp
dGlvbik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wgd3Jp
dGVzU3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29u
c3Q7CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgCisgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0OyB9CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZv
ciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMg
Zm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7
IHJldHVybiBOb0ludHJpbnNpYzsgfQorCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBs
YXRlZCBoZWxwZXJzLgorICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9Cisg
ICAgCisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbExp
bmtTdGF0dXMuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQ
dXRCeVZhcmlhbnQmIG90aGVyKTsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQ
dXRCeVZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9
ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChtX2lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3Ro
ZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJl
U2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNp
dGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSk7CisgICAgCisgICAg
S2luZCBtX2tpbmQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgU3RydWN0dXJl
U2V0IG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxs
cHRyIH07CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOworICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5jcHAKaW5kZXggMGM0YzA3NDdhMGFiODVmYjNhZjgxN2QyOTQ1ZDYyMWFkYzNlYmFkNy4u
ZmNlMGY0ZDhlZTEwZWRkYmNmM2M3NTRlZjgzM2EzNWJlOTdkYmMxOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcApAQCAtNjIs
MTAgKzYyLDEwIEBAIEdldEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRHZXRCeVN0YXR1
cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KICAgICAKLVB1dEJ5SWRTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5SWRTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlJZFN0YXR1cyYgc3Rh
dHVzKQorUHV0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5U3RhdHVzKGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5U3RhdHVzJiBzdGF0dXMpCiB7Ci0g
ICAgYXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5SWRTdGF0dXM+KHN0YXR1cyk7Ci0g
ICAgUHV0QnlJZFN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOworICAgIGF1dG8gc3Rh
dHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeVN0YXR1cz4oc3RhdHVzKTsKKyAgICBQdXRCeVN0YXR1
cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOwogICAgIHB1dHMuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKGNvZGVPcmlnaW4sIFdURk1vdmUoc3RhdHVzUHRyKSkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRz
KQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgZm9y
IChhdXRvJiBwYWlyIDogcHV0cykKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykKICAgICAgICAgcGFpci5zZWNv
bmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0
ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuaAppbmRleCBiZDE1NzA1NDU3MzgwYzM3N2I4NDI4NmQ1M2FhODY4YTMyNjMyNGI1Li45NDk4
M2RiYzc2N2QwN2UyODA0YmQ0NDJjMzdlYjU0Y2Y0NTdiYThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJEZWxldGVCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgi
CiAjaW5jbHVkZSAiSW5CeVN0YXR1cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNp
bmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IFJlY29yZGVkU3Rh
dHVzZXMgewogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBhZGRDYWxsTGlua1N0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiwgY29uc3QgQ2FsbExpbmtTdGF0dXMmKTsKICAgICBHZXRCeVN0YXR1cyog
YWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEdldEJ5U3RhdHVzJik7Ci0g
ICAgUHV0QnlJZFN0YXR1cyogYWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29u
c3QgUHV0QnlJZFN0YXR1cyYpOworICAgIFB1dEJ5U3RhdHVzKiBhZGRQdXRCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlTdGF0dXMmKTsKICAgICBJbkJ5U3RhdHVzKiBhZGRJ
bkJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5U3RhdHVzJik7CiAgICAgRGVs
ZXRlQnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBE
ZWxldGVCeVN0YXR1cyYpOwogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1By
aXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJh
bmRTdGF0dXMmKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewog
ICAgIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPj4+IGNhbGxzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPEdldEJ5U3RhdHVzPj4+IGdldHM7Ci0gICAgVmVjdG9yPHN0ZDo6cGFp
cjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlJZFN0YXR1cz4+PiBwdXRzOworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5U3RhdHVz
Pj4+IHB1dHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9w
dHI8SW5CeVN0YXR1cz4+PiBpbnM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBz
dGQ6OnVuaXF1ZV9wdHI8RGVsZXRlQnlTdGF0dXM+Pj4gZGVsZXRlczsKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cz4+PiBjaGVja1ByaXZhdGVCcmFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA3NTkxOGY2NzczMTgzY2RmY2Vi
MjNkYzNjYzIxZDMyN2U5ZmExODY4Li5mMjdiNzM3NGVmOWFlZTEwN2E3MDE2ZGE4ODFiY2VkZjc4
MTlkNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKQEAgLTI4MSw4ICsyODEsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxv
Y2sqIGMKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAgICByZXNl
dEdldEJ5KGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKLSAgICAgICAgcmVzZXRQdXRCeUlE
KGNvZGVCbG9jaywgKnRoaXMpOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAg
ICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICByZXNldFB1
dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKICAgICAgICAgcmVzZXRJbkJ5KGNvZGVCbG9j
aywgKnRoaXMsIEluQnlLaW5kOjpCeUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggNzMwNGZiMTU0ZTg0MGQ4NWRhMjhl
NmUyNTAxYWFiMThlNTVkNDFhNC4uZTIyNTQwYzA5YmM3ODNlN2Q4ZTA2ZDUzYjdjYTgwODcxZWU2
NzIyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKQEAgLTU0LDcgKzU0LDggQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50
OF90IHsKICAgICBHZXRCeUlkRGlyZWN0LAogICAgIFRyeUdldEJ5SWQsCiAgICAgR2V0QnlWYWws
Ci0gICAgUHV0LAorICAgIFB1dEJ5SWQsCisgICAgUHV0QnlWYWwsCiAgICAgSW5CeUlkLAogICAg
IEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZDFj
MGI0NmE2YTkwNzM5MDM1OWRkMzBjMGNlNjhjMTFjMTdiMjgyMS4uMDdjMmQxZjM1ZGIyZjU5NDYx
YTQ5NzQ5NWEzZmEyYzc0NDZjNzdhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtNDcsNyArNDcs
NyBAQAogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTWF0aENv
bW1vbi5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3Ry
aW5nT2JqZWN0LmgiCkBAIC0zOTczLDcgKzM5NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAg
ICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJl
U2V0IHRoaXNTZXQgPSAqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSk7CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlm
ICh0aGlzU2V0LmlzRW1wdHkoKSkKQEAgLTM5ODIsNyArMzk4Miw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdpbmFs
VmFsdWU7CiAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXNTZXQub25seVN0cnVjdHVyZSgp
ICE9IG5ld1N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBl
bmQoCkBAIC0zOTkwLDcgKzM5OTAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAg
ICAgICAgICAgIH0gLy8gZWxzZSB0aGlzIGlzIHJlYWxseSBhIHJlcGxhY2UuCiAgICAgICAgICAg
ICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSh0aGlzU2V0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDE0MCwxMCArNDE0MCwxMCBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmco
KSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBib29sIGlz
RGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0IHx8IG5vZGUtPm9wKCkgPT0gUHV0
UHJpdmF0ZU5hbWVCeUlkOwogICAgICAgICAgICAgYXV0byBwcml2YXRlRmllbGRQdXRLaW5kID0g
bm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQgPyBub2RlLT5wcml2YXRlRmllbGRQdXRL
aW5kKCkgOiBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCk7Ci0gICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICBQ
dXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAogICAg
ICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAg
ICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgICAgICBpc0RpcmVj
dCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRy
dWU7CkBAIC00MTUxLDcgKzQxNTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAg
IFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJp
YW50cygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNl
dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hDb25kaXRp
b24oY29uZGl0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBm
YWxzZTsKQEAgLTQxNjIsMTQgKzQxNjIsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFu
c2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0
dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0NzMsNyArNDQ3Myw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC00NjUyLDEwICs0NjUyLDEwIEBAIHZvaWQg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcklDU3RhdHVzKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBGaWx0
ZXJQdXRCeUlkU3RhdHVzOiB7CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czogewogICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKLSAgICAgICAgICAgIG5vZGUtPnB1
dEJ5SWRTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCkp
OworICAgICAgICAgICAgbm9kZS0+cHV0QnlTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0
dXJlLnRvU3RydWN0dXJlU2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCmluZGV4IGMyMTZhMzk2ZDcxNjA0MjBkZmI0ODE1ZjEyN2U3ODU5ZDVhOTE3M2Iu
LjZlMjc1MzEwNGJkMzgxNTljY2IxYjFkMzkzNzE1Mzg2YjY0ODZiNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcApAQCAtNDAyLDcgKzQwMiw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpAQCAtMTI2NSw3ICsxMjY1LDcg
QEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0
dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggNjNlNjhkMDM3ZmUxMTEwMWFlNDEy
YTI3ODIyNTNmNTk0M2JkNjI3Yi4uN2Y0MDJlNjk3ZjlkYTA3YTRjNTVhZGE1MTJjNDc5ZGM0ZjIy
Mzc2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgot
I2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtNzQsNyArNzMsNyBAQAogI2luY2x1ZGUgIlBy
ZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNp
bmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgpAQCAtMjM5LDExICsyMzgsMTEgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIGJvb2wg
Y2hlY2tQcmVzZW5jZShKU09iamVjdCoga25vd25CYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFBy
b3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICB2b2lkIGNoZWNrUHJlc2Vu
Y2VGb3JSZXBsYWNlKE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZz
ZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIC8vIFdvcmtzIHdpdGggYm90aCBH
ZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAgICAv
LyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0
QnlWYXJpYW50LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgogICAgIE5vZGUq
IGxvYWQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIGNvbnN0IFZhcmlhbnRUeXBlJik7CiAKLSAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYsIE5vZGUqIHZhbHVlKTsK
KyAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQ
dXRCeVZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICB2b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMjUzLDEzICsy
NTIsMTMgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIHZvaWQgaGFuZGxlR2V0UHJpdmF0
ZU5hbWVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzKTsKICAgICB2b2lkIGVtaXRQdXRCeUlk
KAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwg
IGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CisgICAgICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0
QnlTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CiAgICAgdm9pZCBoYW5kbGVQdXRC
eUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCisgICAg
ICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNE
aXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSk7CiAKICAgICB2b2lk
IGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKKyAgICAgICAgTm9kZSogYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSog
dmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICB2
b2lkIGhhbmRsZURlbGV0ZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlv
biwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgRGVsZXRlQnlTdGF0dXMsIEVDTUFNb2RlKTsKQEAgLTQ1MTQsNyArNDUxMyw3IEBAIE5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgICAgIC8vIHRoZSBiYXNlIG5v
dCB0byBoYXZlIHRoZSBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uIGlmIGFsbCBvZgogICAgICAgICAgICAgICAgIC8vIHRoZSBzdHJ1Y3R1cmVzIGluIHRo
ZSB2YXJpYW50LnN0cnVjdHVyZVNldCgpIGFncmVlIG9uIHRoZSBwcm90b3R5cGUgKGl0IHdvdWxk
IGJlCiAgICAgICAgICAgICAgICAgLy8gaGlsYXJpb3VzbHkgcmFyZSBpZiB0aGV5IGRpZG4ndCku
IE5vdGUgdGhhdCB3ZSBhcmUgcmVseWluZyBvbiBzdHJ1Y3R1cmVTZXQoKSBoYXZpbmcKLSAgICAg
ICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0
cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlJZFN0YXR1cyB3b3JrLgor
ICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlz
IGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeVN0YXR1cyB3b3Jr
LgogCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJpZ2h0IG5vdywgaWYgd2UgaGF2ZSBhbiBP
UENTLCB3ZSBoYXZlIG1vbm8gcHJvdG8uIEhvd2V2ZXIsIHRoaXMgd2lsbAogICAgICAgICAgICAg
ICAgIC8vIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIG9uY2Ugd2UgaGF2ZSBhIGh5
YnJpZCBkYXRhIHN0cnVjdHVyZSBmb3IKQEAgLTQ1OTMsOSArNDU5Miw5IEBAIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpsb2FkKAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKIH0KIAotTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeVZh
cmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQ
cmVzZW5jZUZvclJlcGxhY2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJd
LCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKICAgICByZXR1cm4gaGFu
ZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUp
OwpAQCAtNDk5OCwzOSArNDk5NywzOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbkJ5
SWQoVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZQogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKLSAgICBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVz
JiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBO
b2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVj
bWFNb2RlKQogewogICAgIGlmIChpc0RpcmVjdCkKICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlk
RGlyZWN0LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVl
KTsKICAgICBlbHNlCi0gICAgICAgIGFkZFRvR3JhcGgocHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxz
KCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhl
Y21hTW9kZSksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChwdXRCeVN0YXR1cy5t
YWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciks
IE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2Rl
SW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBjb25zdCBQdXRCeVN0
YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdElu
ZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1w
bGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nl
c3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAg
IGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMo
KSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5
U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0g
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVz
LCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+
IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0
dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7
CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtl
c0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lu
bGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9w
dGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkg
eworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5
U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFy
aWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFu
dEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCk7
IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmIChwdXRCeVN0YXR1c1t2YXJp
YW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJZFN0
YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5U3RhdHVz
W3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3Qs
IGVjbWFNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KQEAgLTUwMzksMjggKzUwMzgsMjggQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGls
YXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CiAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMo
Y3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVk
U3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1
cykpLCBiYXNlKTsKIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlW
YXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAg
Zm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQor
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zm
c2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAg
ICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAg
IGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+
aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgo
TXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0
dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAg
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAg
c3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxh
Y2U6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFu
dDo6UmVwbGFjZTogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIHN0b3JlKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MDY4LDEyICs1MDY3LDEyIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewotICAgICAgICBhZGRU
b0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlk
U3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7Cisg
ICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwg
cHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
KSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsK
LSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTUxMzUsMTIgKzUxMzQsMTIgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlNldHRlcjogewor
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9h
ZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKICAgICAg
ICAgaWYgKCFsb2FkZWRWYWx1ZSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMs
IGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC01MTg0LDI2ICs1MTgzLDI2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5SWQoCiAgICAgfQogICAgIAogICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgZW1pdFB1dEJ5
SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21h
TW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRC
eVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gfQog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRC
eUlkU3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCisgICAg
Y29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZh
dGVGaWVsZFB1dEtpbmQpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwg
IXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5p
bmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1
dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9w
dGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5p
c1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICBh
ZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
cHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0Nh
bGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAg
aWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQog
ICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQot
ICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIHx8IHB1
dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lu
bGluaW5nTGlzdFNpemUoKSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFt
ZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBi
YXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUyMTEsMjkg
KzUyMTAsMjkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlk
KAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAg
ICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKICAgICAK
LSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAg
ICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRT
dGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEt
PnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJp
YW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlP
ZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0g
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAg
IEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFy
aWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7CisgICAg
Y2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVs
ZFB1dEtpbmQuaXNTZXQoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3Rh
dHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlT
dGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGls
YXRpb24oKSkpCkBAIC01MjQxLDkgKzUyNDAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
Y2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgIGNhc2UgUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVm
aW5lKCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNl
cygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJh
c2UpOwogICAgIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAg
ICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewpAQCAtNjQ1NCw0MCAr
NjQ1MywzMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
ICAgICAgICBib29sIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gZmFsc2U7CiAKLSAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2RlT3Jp
Z2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQg
aW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAg
ICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLiBGb3IgYHB1dF9w
cml2YXRlX25hbWVgLCB3ZSBtaWdodCBoYXZlIHNvbWUgaW5mbyBmcm9tCi0gICAgICAgICAgICAg
ICAgLy8gTExJbnQgSUMsIGluY2x1ZGluZyBjYWNoZWQgY2VsbCB0aGF0IHdlIGNvdWxkIHVzZSBp
ZiBCeVZhbCBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY3NzkKLSAgICAgICAgICAgICAgICBpZiAo
YnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0g
ICAgICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aAotICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRUeXBlKQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJZDsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpOwotICAgICAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVu
c3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAg
ICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENvbnN0YW50VmFsdWUpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAg
UHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBt
X2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKKworICAgICAgICAgICAgICAg
IGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRp
ZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBp
ZGVudGlmaWVyLnVpZCgpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIu
Y2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9s
Q2VsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0Nv
bnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVu
dCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQp
LCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsK
KyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2lu
ZCk7CisgICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0cnlD
b21waWxlQXNQdXRCeU9mZnNldCkKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2YXRlTmFt
ZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRT
dGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2luZCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICBpZiAoIXRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0UHJpdmF0ZU5hbWUsIE9wSW5mbygpLCBPcEluZm8oYnl0ZWNvZGUubV9wdXRLaW5kKSwg
YmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0
X3ByaXZhdGVfbmFtZSk7CkBAIC02NTY3LDEyICs2NTU2LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAg
ICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAKLSAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBwdXRCeVN0YXR1cyA9IFB1dEJ5U3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5l
TWFwLCBtX2ljQ29udGV4dFN0YWNrLAotICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CisgICAgICAgICAg
ICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGhh
bmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlk
KSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGRpcmVjdCwgbmV4dE9w
Y29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CisgICAgICAgICAgICBo
YW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgZGlyZWN0LCBuZXh0T3Bj
b2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIApAQCAtNzk3OSwxMyArNzk2OCwx
MyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaEdsb2JhbFByb3BlcnR5KGdsb2JhbE9iamVj
dCwgaWRlbnRpZmllck51bWJlcikpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKIAotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzOworICAg
ICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1czsKICAgICAgICAgICAgICAgICBpZiAodWlk
KQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5k
Ojpub25lKCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29t
cHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywgdWlkKSwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeUlk
U3RhdHVzKFB1dEJ5SWRTdGF0dXM6OlRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSBQdXRCeVN0YXR1cyhQdXRCeVN0YXR1czo6VGFrZXNTbG93UGF0aCk7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKLSAgICAgICAgICAgICAg
ICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQorICAg
ICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6UmVw
bGFjZQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0dXJlKCkuc2l6ZSgp
ICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8o
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSksIE9wSW5mbyhieXRlY29k
ZS5tX2dldFB1dEluZm8uZWNtYU1vZGUoKSksIGdldChieXRlY29kZS5tX3Njb3BlKSwgZ2V0KGJ5
dGVjb2RlLm1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04ODE5LDQ1
ICs4ODA4LDI3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2Rl
IGJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRlCiAgICAgTm9kZSogdmFsdWUgPSBn
ZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNv
ZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBib29sIGNvbXBpbGVkQXNQdXRCeUlk
ID0gZmFsc2U7Ci0gICAgewotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7
Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsK
LSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVP
cmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGlu
IHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAv
LyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgaWYg
KGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0gICAg
ICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAg
JiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGNv
bXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlW
YWxJbmZvLT5jYWNoZWRJZDsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9n
cmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKQotICAgICAgICAg
ICAgICAgICAgICBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwo
KSk7CisgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgeworCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFj
aywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKKyAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
dWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZp
ZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwo
KSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5m
byhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCks
IHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdXRCeUlk
U3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAg
ICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAg
ICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwg
dWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2VjbWFNb2Rl
KTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKICAgICAgICAgfQotCi0g
ICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOwogICAgIH0KIAog
ICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKaW5kZXggOTE2NDcwZDE3ZDUzYWYzNTZiZDUxNDRjOTRlNjA3ZGEwNzk1
OGI0YS4uNmYyMDRkMmM1ZGUwYTYxMmY3MzFjOTU3YjQ2MWRjZjMwYzRhMTFhMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTU2OSw3ICs1NjksNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1
bWVudHM6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwCmluZGV4IDg2YTNkMDc2NjRkN2ZhOTI3NTEyOTk3NzlmNDZmMTk3MmIwYWQwZjMuLjRjZTlm
ZjBlYjVkYTUxMGVjMjM0MDY0NjJhNzFlODgwOTUwOTYyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCkBAIC04MSw3ICs4MSw3
IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRC
eUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggZWFlYWY4NWVhMjU0MTcy
NTc1NWY0OGNlZmRlZGUwM2I4MWM5ZmEyYS4uYjg4MjVhY2FlMzRlNTVmODkyNjU5MTI5ODQxZDkz
MjRhNDBjMTYxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJERkdQ
aGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTUwMSw3ICs1MDEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgCiAKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Cisg
ICAgICAgICAgICAgICAgICAgIFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNb
aV07CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCkuZ2VuZXJpY0Zp
bHRlcihbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuY29udGFpbnMobV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC01MTMsMTEgKzUx
Myw5IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9
IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlWYXJp
YW50OjpyZXBsYWNlKHZhcmlhbnQuaWRlbnRpZmllcigpLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
LCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw3
ICsxMjExLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
ICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2Us
IGNoaWxkRWRnZSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQg
aW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUs
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
KQorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSog
bm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeVZhcmlhbnQm
IHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewogICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBu
b2RlLT5jaGlsZDEoKTsKQEAgLTEyMjQsNyArMTIyMiw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGlu
Z1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKIAogICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gbnVsbHB0cjsK
LSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgIHRyYW5zaXRpb24gPSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRk
KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRT
dHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgfQpAQCAtMTI2OSw3ICsxMjY3LDcgQEAgY2xh
c3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5j
b252ZXJ0VG9QdXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAg
ICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OwogCi0gICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAg
ICBpZiAoZGlkQWxsb2NhdGVTdG9yYWdlKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3Bl
Y05vbmUsIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHksCkBAIC0xNDA2LDEwICsxNDA0LDEw
IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
aWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGlj
KSwKICAgICAgICAgICAgIGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAot
ICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAorICAgICAgICAg
ICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAgaXNEaXJlY3QsIHBy
aXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCkBA
IC0xNDI0LDggKzE0MjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAg
IFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewotICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAg
IGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsK
KyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDgsNyArMTQ0Niw3IEBAIGNsYXNzIENvbnN0YW50
Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVj
dHVyZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkgfHwgcHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc1NldCgpKTsKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpKTsKQEAgLTE0NjQsOCArMTQ2Miw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24n
dCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMu
CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5SWRTdGF0dXMsIG5vZGUtPm9yaWdpbiwKLSAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAorICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlTdGF0dXMsIG5vZGUtPm9yaWdpbiwK
KyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKICAgICAgICAgICAg
IEVkZ2UoYmFzZU5vZGUpKTsKIAogICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCmluZGV4IDYwZmJiMTVjNTkxNmI4OWRiNGM2ZDU1MTUwYzY2NTNjMzdl
MThmMWUuLmU2NDgxNjdjMTE4NmJjOGM5M2YzMmU4YzU0YmU3NTE4MzBlZjExMzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29s
IGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVy
ZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFhNDk2NGU5
YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3Mzg1MDkuLmRlNGYyM2ZiYWEwYzk2ZGJjOGFhYzUy
NDkxNTNmOTg2ZTM5OGEyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcApAQCAtMjg2NSw3ICsyODY1LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZj
OWRjNDM5NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5
NTA4NzYzOGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAg
LTM4NSw4ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJp
bnQoY29tbWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0
YXR1cygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwot
ICAgIGlmIChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21t
YSwgKm5vZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVz
KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAg
IGlmIChub2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9S
YXcoKSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZjOWRiMWE3YzU0NGZhMWNh
OThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5YTc5MTg0MmU4ODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMjUy
LDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIGxpbmtCdWZm
ZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBsaW5rQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5rQnVmZmVyKTsKKyAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFhNDA5NGY1NzA2MGE3Y2Rh
OWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkxYjI5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTk5LDYgKzE5OSwxMSBA
QCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgICAgICBtX3B1
dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4oZ2Vu
LCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlWYWwoY29uc3QgSklUUHV0
QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgIHsK
KyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZh
bEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAgIHZvaWQgYWRkRGVsQnlJ
ZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93
UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBAIC0zNjAsNiArMzY1LDcg
QEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0
QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5VmFs
R2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAgICBWZWN0b3I8SW5saW5l
Q2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9wdXRCeVZhbHM7CiAgICAg
VmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPiwgND4gbV9kZWxC
eUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5VmFsR2VuZXJhdG9y
PiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRJbkJ5
SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2NGYwZDZmNDY0NjY0ZDBm
Li4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBFeGl0TW9k
ZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUp
CiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFkMjc3YTE5YmQxYzlhLi43
Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0
ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCisjaW5jbHVkZSAi
UHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oIgogI2lu
Y2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCkBAIC05
Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAKIHN0cnVjdCBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Owog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0zMjEwLDE1ICszMjEwLDE1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEluQnlTdGF0dXMq
PigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0dXMoKQorICAgIGJvb2wg
aGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0
QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlTdGF0dXM7CiAg
ICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0dXMoKQorICAgIFB1dEJ5
U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzUHV0QnlJZFN0
YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5SWRTdGF0dXMqPigpOwor
ICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5m
by5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNEZWxldGVCeVN0YXR1
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggZTc1YmNmZThh
MWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2ZkYWM4ZjIzNTE4Mjg3MjI0
ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGaWx0ZXJQdXRCeVN0YXR1
cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRlbGV0ZUJ5U3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJTZXRQcml2YXRlQnJhbmRT
dGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCmluZGV4
IDY2NzgzNTU1ZGYyMTZkMThmOTBjNTk1NDZlYzc5MmQ1MGQ4ZmQ1OGEuLjFmNDE4MzE4YTRjMGRl
YzZkMmU5OWQ0MDlmNzFkYWZhNDY5N2IyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcApA
QCAtMTI1OCw3ICsxMjU4LDcgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC0y
NTU0LDE1ICsyNTU0LDEzIEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRob3NlIG5v
ZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMgbWVh
bnMgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgY2Fu
IHNpbXBseSB0cnVzdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJl
IHVzaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZh
cmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVudFNldCwg
Y3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9mZnNldCA9
IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuY2xlYXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmFkZChz
dHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojpy
ZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRT
ZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJu
IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTI2MTUsNyArMjYxMyw3IEBAIGNsYXNzIE9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAppbmRleCAxNjIyZGQ4YjFiNTIxY2M0MWRmYTg1YWI1MzI2MmVjZTgwZmU3NGYyLi44OWU1ZWY0
ZDg1MWVjOTBkNmQ5ODU1Y2E0N2NhNWJjNzgyNTcyZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAgY2xhc3MgUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIFdlYWtNYXBTZXQ6CiAgICAgICAgIGNhc2Ug
RmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0g
ICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApp
bmRleCAxZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwLi5kNTQ5NjQ0NTBi
NjMyMjc0ODk4ZDY4YzhhOWJlOWY3YTc2Zjk4MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgYm9vbCBpZ25vCiAgICAgICAgIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0MWNm
ZDFlOWE1OGRkYzQyNS4uNWRhMDQzODdiNmQwZWU4OTg3NDhjMjllYzc3ODY0ZmJjOTFlYjBmMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
IGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCmluZGV4IDg4MDhiMTBjODI2YzUxMDY5Nzk3NDAwOWU5NmYxOTlmYThmMTBh
NGMuLmM4ZmMxNTc0MTU5ZDQ0NmNkZWM4OWU4N2NkNzE4ZDMwYTUyMDE2OWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtNTg3
MSw3ICs1ODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDU0MTBkOTA4OTZkYzRm
MDEwNTc5MzBkZjgyZjY2MTkyYjgxZjZjMGYuLmM1ZTVjZjM2YTc3MGQxNTgzYjY5M2RmZDg4MWQ2
NDI0YWIxN2JjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CkBAIC0zMTIsOCArMzEyLDggQEAgY2xhc3MgVmFsaWRhdGUgewogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
IT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIXZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRjaCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggZmRhNjRkMzVkYTM0Mjg4OWM3
OThjMDUxZTk1NzZlOGExZTMzYTM5Yi4uZjFhMzgwOWQ3ZWZlMzBmOGQ1OWJhMjFmYWNkMDcwOWU0
MzhiOTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgY2xhc3MgVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAg
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgpAQCAtNDIxLDcgKzQyMSw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYXNlIEZp
bHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDAzZjg2NTJjNmNiODJjNjIwMjBk
MWU2NmJiNTlmNDY1OTFkODNlNGMuLjgzYjUxYmE5Y2Y3NjVkYTA0NjM3M2E3OWIxY2EwMzMwYzQz
YzdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGIwMDFkMTMyZjAyZmZjMzgyNTNjMzhkZjJl
NDliMGNmMzZlNjJmNjYuLmE1NDM4MDk2NTgwZTQyZjc1MTU0NmQzNTliY2IwNDExZGZkNDg2MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTE2NDksNyArMTY0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC04OTUxLDcgKzg5NTEsNyBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSk7CiAgICAgICAgICAgICAgICAgYmFzZVNldC5h
ZGQoc3RydWN0dXJlKTsKQEAgLTg5NjYsMTYgKzg5NjYsMTYgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZh
cmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAg
ICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAKICAgICAg
ICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJp
YW50LmtpbmQoKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5k
KCkpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6
aWx5KAogICAgICAgICAgICAgICAgICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3du
ZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtODk4Nyw3ICs4OTg3LDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9wZXJ0
eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9PSB2YXJp
YW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlubGlu
ZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RT
TC5yYgppbmRleCA2OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4Li43OGZk
NDk0M2Y5ZWNiYzRjMzVjN2NkY2IzMmI3Mzc3Y2FiOWYxZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTQxLDcgKzE0MSw3IEBAIGRlZiBzZWxmLndyaXRlX2J5
dGVjb2RlX3N0cnVjdHMoYnl0ZWNvZGVfbGlzdCwgYnl0ZWNvZGVfc3RydWN0c19maWxlbmFtZSkK
ICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUu
aCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0
YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdz
LmgiCiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDBiNGMyYjliZTBmNWZmZjE1MWEzYjA3ZTlhYTI0
ZmNjZjkwNTAzOTguLjQxMTg2ZGJlOTQyMDk2MjcwMGE1Yjk3NjkxM2ZmMGE3YjI0YjdhYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTM1Nyw3
ICsxMzU3LDggQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1ibGVy
IHsKICAgICB9CiAgICAgdm9pZCB1bmJveERvdWJsZShHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5
bG9hZEdQUiwgRlBSUmVnIGZwciwgRlBSUmVnIHNjcmF0Y2hGUFIpCiAgICAgewotICAgICAgICBt
b3ZlSW50c1RvRG91YmxlKHBheWxvYWRHUFIsIHRhZ0dQUiwgZnByLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2hGUFIpOworICAgICAgICBtb3ZlSW50c1RvRG91Ymxl
KHBheWxvYWRHUFIsIHRhZ0dQUiwgZnByKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBib3hEb3Vi
bGUoRlBSUmVnIGZwciwgSlNWYWx1ZVJlZ3MgcmVncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0
YXRzLmgKaW5kZXggZjA0YzFmNDI4ZTEwYmZjNzFmYTVjZTM1ZTAwMjg2OGJiNzhhZGVmNi4uOTFi
M2IzMTU1MTBkYTY4MjRiM2M5NjM0MTBlMzM2ZDk1ODlhYmM3YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9JQ1N0YXRzLmgKQEAgLTY3LDEwICs2NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KSBcCiAgICAgbWFjcm8oT3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKICAg
ICBtYWNybyhPcGVyYXRpb25QdXRCeUlkUHV0UHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6
ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRBZGRBY2Nlc3NDYXNlKSBcCi0gICAgbWFjcm8oUHV0QnlJ
ZFJlcGxhY2VXaXRoSnVtcCkgXAotICAgIG1hY3JvKFB1dEJ5SWRTZWxmUGF0Y2gpIFwKLSAgICBt
YWNybyhJbkJ5SWRTZWxmUGF0Y2gpIFwKKyAgICBtYWNybyhQdXRCeUFkZEFjY2Vzc0Nhc2UpIFwK
KyAgICBtYWNybyhQdXRCeVJlcGxhY2VXaXRoSnVtcCkgXAorICAgIG1hY3JvKFB1dEJ5U2VsZlBh
dGNoKSBcCisgICAgbWFjcm8oSW5CeVNlbGZQYXRjaCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFj
ZVdpdGhKdW1wKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMpIFwKICAgICBt
YWNybyhPcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKaW5kZXggYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThlZmE0NzEzMi4u
NTBkZTg1NWI2YWM5MGVlNmQzZDFjOTYxZTQ0ODQ4MjM5NWE0NjE2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcApAQCAtNTEwLDYgKzUxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgbV9nZXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2dldEJ5SWRXaXRo
VGhpc0luZGV4ID0gMDsKICAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRCeVZhbElu
ZGV4ID0gMDsKICAgICBtX2luQnlJZEluZGV4ID0gMDsKICAgICBtX2luQnlWYWxJbmRleCA9IDA7
CiAgICAgbV9kZWxCeUlkSW5kZXggPSAwOwpAQCAtNjYyLDYgKzY2Myw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkSW5k
ZXggPT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZFdp
dGhUaGlzSW5kZXggPT0gbV9nZXRCeUlkc1dpdGhUaGlzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcHV0QnlWYWxJbmRleCA9PSBtX3B1dEJ5VmFscy5zaXplKCkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKG1faW5CeUlkSW5kZXggPT0gbV9pbkJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9pbnN0YW5jZU9mSW5kZXggPT0gbV9pbnN0YW5jZU9mcy5zaXplKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPT0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtOTA5LDYgKzkxMSw3IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwog
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKKyAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5k
ZXggNGRhN2EyZmQ2NmYxNTBjZmNkMzU5MDJmZTkzZTU0ZmVkMmE1YWQyZS4uMGRkZGZmNDkyYmEz
MWJmZjA0YTA1MGI3NGIzMjEyZGE2MjFjZWZiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBA
IC0yMjUsMjggKzIyNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJh
eU1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
RGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRl
Y29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTI3NSwxMCArMjUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFs
SW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRl
bnRpZmllcik7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIENhY2hlYWJsZUlkZW50aWZp
ZXIpOwogCkBAIC0xMDgzLDYgKzEwNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgICAgICBW
ZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAgICAgVmVjdG9yPEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlJ
ZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5CeVZhbEdlbmVyYXRv
cj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1fZGVs
QnlJZHM7CkBAIC0xMTEwLDYgKzEwODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5z
aWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9n
ZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0
QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZhbEluZGV4
IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRfTUFY
IH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAg
ICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXgg
NjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uYTkwYzg2OWQzOTc5OTc2
YzZmZmE2ZWRkMjNmYzMyNjM0NDJmNTlmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENh
Y2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAgIEVDTUFNb2RlIGVj
bWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2Rl
QmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVz
ZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAgICAgOiBKSVRCeUlk
R2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vz
c1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikK
ICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0S2luZChwdXRL
aW5kKQogewpAQCAtMzgxLDYgKzM4MSw2NyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpm
aW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiAgICAg
ICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNN
QU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKKyAgICA6IEJhc2UoY29kZUJsb2NrLCBq
aXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0
ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKKyAgICAsIG1fcHV0S2luZChwdXRLaW5k
KQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIG1fc3R1
YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAgbV9zdHViSW5mby0+
YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJlZ3MucHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVHUFIg
PSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiA9IHN0
dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+YmFzZVRh
Z0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJvcGVydHku
dGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVm
ZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6ZmluYWxp
emUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0
YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0aW9uX0dTc2lKSkMgSklUUHV0QnlWYWxHZW5l
cmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9wdXRLaW5kKSB7Cisg
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAg
QVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3Ry
aWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJSZWcgc3R1YkluZm9HUFIpCiAgICAgOiBCYXNl
KGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlw
ZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCBlZTY4MTQxMDFhODFlYmQxNTViZjRkYjY5
M2ZmNDdjOGEyNzhmN2ZiLi4zMDViNzBkM2Y5MmIxZmUzYjVhNjY3ZGIzMzQ0YmI2NjdkNmZiNDZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAgY2xhc3MgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogCiBjbGFzcyBKSVRQdXRC
eUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogcHVibGljOgot
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAgICAgICA6IG1fZWNtYU1vZGUoRUNNQU1vZGU6
OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBl
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKQEAgLTE0MiwxMCAr
MTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJ
ZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9u
KCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBFQ01BTW9kZSBt
X2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CiAgICAgUHV0S2luZCBtX3B1dEtpbmQ7
CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCisg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlLCBQ
dXRLaW5kKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkpOwor
ICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1wOworICAgIH0KKworICAgIHZvaWQg
ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93
UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CisKKyAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsK
KworcHJpdmF0ZToKKyAgICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgp
IH07CisgICAgUHV0S2luZCBtX3B1dEtpbmQ7CisKKyAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7Cisg
ICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwor
fTsKKwogY2xhc3MgSklURGVsQnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IgewogICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CmluZGV4IDc1ZGM3YzM2OWYyYWQzZmFiMzIwYjhlYjc5ZmM3ZDc1M2Y2ODA4ZjkuLjQ0ZGJhMGVk
MTU1M2E2NTRhMmY0ZjdmZmZmMGFmYjE4ZjAxZjViNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29u
c2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAg
ICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVj
dCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZh
bHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpC
eUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3
Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lk
ZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAg
ICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7
CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlk
LCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3
Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lk
ZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAg
ICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0
cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOwor
ICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3Qs
IHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQs
IFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdD
YWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRl
ckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAg
ICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7Cisg
ICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwg
UHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxk
Q2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJ
bmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50
aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAgICAgcmVw
YXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1
cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05MjQsMTYg
KzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRfVU5VU0VE
KGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGlu
Z0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAg
ICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xk
U3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xv
dCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNW
YWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3Rh
dGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBi
YXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0
QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFz
ZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYnlWYWxJ
bmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJy
YXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMo
KTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwg
ZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEsMzIgKzk1
MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVj
bWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CisKICAg
ICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAg
ICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAg
aWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxl
KQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJp
bmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50
aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8t
PmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1
dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJv
ZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
IChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFz
VWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAgc3dpdGNo
IChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRp
YyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBG
QUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJy
YXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmls
ZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0YXRp
YyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgo
cHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRl
eChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0cmlj
dCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90
VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1
YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxs
KHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0
cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xv
YmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAyMywy
MjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZl
VXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0
aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1Zh
bHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemlu
ZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5n
ZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9u
UmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2Ny
aXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFz
ZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0g
Qnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2
bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAg
ICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9k
ZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFs
SW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwo
bG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9k
ZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
IEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYg
KCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQu
aXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAg
IGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQ
dXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVj
dCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGls
IDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlv
blJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5p
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
KCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hl
YWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
ICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVC
bG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkg
JiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3Jp
cHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0
LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAoc3Vic2Ny
aXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkp
OwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAg
ICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZv
LT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
SklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9j
aywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5m
by0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2Vz
cyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5
VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2Fj
aGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXND
ZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9y
aWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgICAg
IGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBhdGNo
UHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0
OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4g
MTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBu
ZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24t
aW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRl
cmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAv
LyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xv
d1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAg
ICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUs
IHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGlt
aXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09
IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5
IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0g
ICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZv
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAg
fQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKworICAg
IHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6
c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5
VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1
YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQn
cyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCisgICAg
cHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpz
bG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1v
ZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJzY3JpcHQu
aXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAh
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0
aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNP
YmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFz
T3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0
IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFy
cmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5
TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZv
LT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhp
bmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoc3R1Yklu
Zm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgewor
ICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbElu
Zm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0
QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwg
ZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0
byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBn
ZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0
aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVj
dC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYgKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkg
eworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxs
KHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQu
aXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAg
aWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNh
Y2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6
OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJs
b2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZv
LT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNz
IHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNo
ZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0Nl
bGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2Nr
LT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFs
dWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0s
IGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAg
ICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8t
PmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikp
CisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtp
bmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRo
YW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAv
LyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBu
b24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAg
aXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAg
ICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAg
c2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgot
ICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAg
ICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAK
LSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
QnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFz
ZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0
aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBzdWJzY3Jp
cHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0g
T3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkg
dG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAg
ICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8t
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVj
bWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8s
IHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUp
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9n
dWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAg
ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFN
b2RlOjpzbG9wcHkoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAotICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZh
bHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKyAgICBzdHViSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwog
fQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBF
Q01BTW9kZTo6c2xvcHB5KCkpOworfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNt
YU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJl
Y3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwg
dmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBw
cm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlv
blByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAg
IEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNP
YmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNs
b3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAppbmRleCBjZDNlMWJkNDE0ZWNkMTcwYmE0YTI1NTg5MzhmMWVkNTQ0
M2FiODk1Li5kOGZkMWU3NDY0MjgxZTZlZDBlNmNjNzRlMzRjNzAyNWFiN2Q1YWVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsyMDMsMTUg
QEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdl
bmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8q
LCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJp
dmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFs
SW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUp
KTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmls
ZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUq
KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQ
cm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFy
cmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFy
cmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5
UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFy
cmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSos
IEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxs
LCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxM
aW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKaW5kZXggZDM5YmM2ZDc1M2Q2NGQ2ZWY3M2E3OGE0NWY4YjlmNjU4MjUzNzIzZi4u
YWYyZjhkMjQzOTRjZGE0ODU2MjU2ZWJmNDVhOWNhNzU0ZDQ2MTEzMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCw2NSArNDM4
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9
IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1
dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRk
QnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0g
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNo
YWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFu
dCkgewotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0g
ICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4
SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIu
bGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1p
dFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShu
b3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5
X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQog
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUp
OwogCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
LQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9u
V3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVn
VDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7
Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qz
KSwgcmVnVDIsIGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9i
eXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9u
ZSkpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKKwor
ICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBp
ZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CkBAIC02NjEsMTIgKzYyNywxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7
CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5
dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CisgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNE
aXJlY3QpCkBAIC02NzQsMTYgKzY0MywxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAg
IGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkp
OwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CisgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworCisgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUo
KSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDMsIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTY5NCwyOCArNjYxLDI2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1
bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJn
dW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
ZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJv
ZmlsZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0g
aXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGlzRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5z
bG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNzM2LDE4
ICs3MDEsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQ
UjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIGVjbWFNb2RlR1BSKTsKKyAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+
KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBzdHViSW5m
b0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKIAog
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgQnlWYWxJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEFk
ZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgaml0LnJldCgpOwog
CkBAIC04MDksMTMgKzc3NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogCiAgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1
bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQ
UjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1lbnRHUFI1OwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VHUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7
CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwgcHV0S2luZEdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CkBAIC04NTEsMTQg
KzgxNiwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BS
MzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFsT2Jq
ZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBwdXRL
aW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIs
IHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOwogICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKQEAgLTMyOTAsODIgKzMyNTUsNiBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRl
bnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBDYWNoZWFi
bAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
Ci0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSBmYWxzZTsKLQotICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJs
ZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91
c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgbmVlZHNMaW5r
Rm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChi
eXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFy
cmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUp
OwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyLCB0eXBlKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRB
cnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBDdXJyZW50bHksIEJp
Z0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZlciBjb21lcyBoZXJlLgotICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MwotICAg
ICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyLCB0
eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKG5lZWRz
TGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQocmVtb3ZlQ29kZVB0clRhZyht
X2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJsZUFkZHJlc3MoKSkgPT0gcmVtb3ZlQ29k
ZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOwotICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20sIG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxl
ZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaWYgKCFpc0RpcmVjdCkg
ewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRy
ZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAg
ICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVu
dGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFy
Z2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09w
ZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3Bl
cmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5B
ZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29u
c3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwK
LS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFk
dmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNz
UHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJ
bmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLQogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgp
LnB0cigpOwpAQCAtMzQwNyw1MyArMzI5Niw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAm
JiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1
dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwotICAg
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLQotICAgIEp1bXBMaXN0
IGRvbmVDYXNlczsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2luZCwg
cHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNo
ZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhU
YXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRvbmVU
YXJnZXQpOwotICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5k
bGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX25lYXJDYWxscykgewot
ICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGNhbGxTaXRlIDogbV9mYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2Fs
bGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0
ZS5jYWxsZWUpOwotICAgIH0KLSAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNoQnVm
ZmVyKTsKLQotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9T
VFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRy
VGFnLAotICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5
IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gUHV0
S2luZDo6RGlyZWN0KSA/ICJfZGlyZWN0IiA6ICIiLCBwcm9wZXJ0eU5hbWUudWlkKCktPnV0Zjgo
KS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51
bnRhZ2dlZFZhbHVlKCkpOwotICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8o
KTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gcHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5B
ZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdl
bmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJ
VE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3Bl
Y2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPihCeVZhbEluZm8qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLXRlbXBsYXRlIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIp
OwotCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtMzcwOSw3ICszNTUxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHkKICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwogICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5
U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEpOworICAgIG1vdmVJbnRzVG9E
b3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2NyYXRjaCwgZnBSZWdUMCk7CiAgICAgcmVhZHkubGlu
ayh0aGlzKTsKICNlbmRpZgogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNzVkMGJkN2Y2ZWYzNWM3NjI3MzEz
ZjI2YmE2NWExNjhkODNiOTQ1Ni4uYjk4YmZlY2VkYWE1NTYwMWY5NWE4OGJlZGE2MWIwOWYxYTM0
MzQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCkBAIC01NDUsNyArNTQ1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWQKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwogICAgICAg
ICBKdW1wIHJlYWR5ID0ganVtcCgpOwogICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAgICAg
ICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDAsIGZwUmVnVDEpOworICAg
ICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdUMCk7CiAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwogICAgICAgICByZWFkeS5saW5r
KHRoaXMpOwogICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJl
Z1QyLCBUaW1lc0VpZ2h0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRl
eCAzN2E4MGIyOTU3NzIxMGYzNWUwNmQ4MWJhMTM0NWY2OTc4MDA5NjQ0Li40YjcxYTBmYTlmZDk5
MDMxM2NhNGFiNzlkMTk0M2Y4YzgxZDdmMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKQEAgLTU2OCw1MyArNTY4LDk0IEBAIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTCiAg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9u
R2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5k
KSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKK3N0YXRpYyBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtp
bmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0Owor
ICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAg
c3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGF1dG8g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAgIHN3
aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERl
ZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RN
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewor
ICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZp
ZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IHJlc3VsdDsKQEAgLTY4Miw4ICs3MjMsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
awogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
c3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5
S2luZCwgcHV0S2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC04MTcsMTIgKzg1OCwx
MiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAK
ICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgp
IDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwog
CiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwogCkBAIC04MzUs
MTIgKzg3NiwxMDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKIH0K
IAotdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkK
K3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwg
UHV0S2luZCBwdXRLaW5kKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKworc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUs
IEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkKK3sK
KyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpLmhl
YXApOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAg
ICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5
cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFt
cGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5
cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBC
aWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6
CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4
aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdl
U2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVs
bHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxw
dHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJ
Zk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsK
K30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNt
YU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hl
KQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtp
bmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKIH0KIAog
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYg
c2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBE
ZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2LDcgKzExMjEsNyBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5B
Y2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5
SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlT
ZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQ
cm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0
SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5MSw1NSBAQCB2b2lkIHJlc2V0R2V0
QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0
QnlLaW5kIGtpbgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgcmVzZXRQdXRCeShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQg
a2luZCkKIHsKLSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFy
Z2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIEZ1bmN0
aW9uVHlwZSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLSAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemU7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5j
dGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogewor
ICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdl
dChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBl
ID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBG
dW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rp
b25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQog
CiAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRG
dW5jdGlvbik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2lu
ZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KIH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2MzczYzBhYzM2MjlkOGU2
Li5lY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBjbGFzcyBHZXRCeUtp
bmQgewogICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsK
KyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxCeUtpbmQgewogICAg
IEJ5SWQsCiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFzcyBJbkJ5S2luZCB7
CiAKIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hl
YWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
R2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCByZXBhdGNo
QXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwg
SlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Cit2
b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0
cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaERlbGV0
ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNW
YWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8m
LCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91
bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwog
dm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJl
U3R1YkluZm8mKTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUq
LCBDYWxsTGlua0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwog
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2Fs
bExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZvaWQgcmVzZXRJbkJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXNldEhhc1ByaXZhdGVC
cmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKaW5kZXggN2VlYTc1ODcwZTdi
MTUyOTY5MTBkNWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2IwNzkxNGVlZDdmNjc3Nzk5MDFmYmJh
MzA2YmM0NzEyYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
Ly8gVGhlIGZvbGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBmb3IgdGhlIG9wY29kZSBuYW1lcy4g
VGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0
YXR1cy5jcHAgYW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8gYmVjYXVzZSB0aGVyZSBpcyBjb2Rl
IChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlTdGF0dXMuY3BwKQogLy8gd2hpY2gg
cmVmZXJzIHRvIHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZWZpeGVkIHdpdGgg
ImxsaW50XyIuCiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50YXRpb24sIHRoZSAyIGFyZSBlcXVp
dmFsZW50LiBIZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFsaWFzIGhlcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435827</attachid>
            <date>2021-08-18 19:27:50 -0700</date>
            <delta_ts>2021-08-18 19:44:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210818192749.patch</filename>
            <type>text/plain</type>
            <size>274748</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5lNjUxNDI3NTg1NTk0ZGY0
MDZkMzM5ZTg5ZjZiYzY4NzMxZjQ1YWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjEtMDgtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0
QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEtMDgtMTYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0IHVudXNlZCBMTEludCBvcGNvZGVzIGFy
ZSBub3QgaW5hZHZlcnRlbnRseSB1c2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4OThjLi5lYjBjMWM4NGJhMGZk
NjcwNGYzZjE4Y2JkODNmZmM4NTkwYjQzZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09i
amVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3RERE
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRS
ZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMz
MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2NywxMSArMjg2NywxMSBAQAogCQkwRjkzMzI5NDE0
Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRB
ODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQg
LyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEw
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04Njk4LDEwICs4Njk4LDEwIEBACiAJCQkJMEZE
M0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYx
NUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNE
MjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAg
Ki8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAq
LywKQEAgLTEwNTEwLDggKzEwNTEwLDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEg
LyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFF
NzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAz
MUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0
QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUz
MTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2Fz
ZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5j
cHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCmluZGV4IGRmODgzODZhODMyM2Q4NjkxMmNmZTUzNTMxZTNh
ODJkZmI0NGViOGUuLjkxMTdiYjg0NGM2MDdlYjVlNTIzM2ZiMzhhNDUyMjRiNDY3MzY0NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCkBAIC0xMDAxLDkgKzEwMDEsOCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB2b2lkIG1vdmVJbnRzVG9E
b3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXggMTQ0NWM3
OTFiMjhjZWY1ZGZjMTU2YzMxMjRjNmE0ZTIyMjFhYzFhNC4uNzRkMTI3NjI1YTc3YjUxMTY5YmFk
ZjlhZDM1YzdlODViMzUzOWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCkBAIC0yMDcyLDkgKzIwNzIsOCBAQCBjbGFz
cyBNYWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3Nl
bWJsZXI+IHsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0
ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAg
dm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBG
UFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAppbmRleCA4ZDAyMmUzYjgyNWY1OGQyZWY0ODgyMWIxYzJhOTQyNTY5MWQxYjQ5Li5hNjY5OTU5
NzA1NTBhOWFiNTFjZDI2ZDQ5MTk1NjY4ZjNiMGM5NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCkBAIC0xODMsMTQgKzE4
Myw2IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uIHsKICAgICAgICAgbW92ZUZsb2F0VG8zMihzcmMsIGRlc3QxKTsKICAgICB9CiAKLSAg
ICB2b2lkIG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIs
IEZQUmVnaXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKLSAgICB7Ci0gICAgICAg
IG1vdmUzMlRvRmxvYXQoc3JjMSwgZGVzdCk7Ci0gICAgICAgIG1vdmUzMlRvRmxvYXQoc3JjMiwg
c2NyYXRjaCk7Ci0gICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNo
KTsKLSAgICAgICAgb3JQYWNrZWQoc2NyYXRjaCwgZGVzdCk7Ci0gICAgfQotCiAgICAgSnVtcCBi
cmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm1fcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMz
NWI2Li45OGUwYjE5NjA5YjMxNGZjNDQzY2ZlNmU3NjNiYzU1MjZlZDdkYWM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwx
OSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1
MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNv
bnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3Nywy
NCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3Vi
bGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAg
ICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZN
JiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgp
ID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtMTE5OSw5
ICsxMzAzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CkBAIC0xMjI3LDE2ICsxMzI4LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9m
Qm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGpp
dC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBp
c0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKQEAgLTEyNjIsMjEgKzEzNjMsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52
YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQu
YnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZEln
bm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAg
ICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwot
ICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUo
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gz
R1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzg3LDI2NiBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkg
JiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNv
dWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNo
ZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOworCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0
b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisjZW5kaWYKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90eXBl
ID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAgICAg
ICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlH
UFIsIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFu
Y2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3Rl
ZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091
dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJ
bnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAg
ICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRU
b0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsK
KyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIo
KSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0
ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1
ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRk
ZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmUpIHsKICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0
KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBQcm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LmJyYW5j
aDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQorICAgICAgICAgICAg
Ly8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAg
ICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVn
aXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOiB7CisgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhh
dCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5Lgor
CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7
CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKwor
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKSk7
CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQorICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKHZhbHVlUmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIg
IT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNhc2UgPSBqaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAg
ICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBkb3VibGVDYXNlLmxp
bmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKHNjcmF0Y2hHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vsc2UKKyAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQ
Uik7CisjZW5kaWYKKyAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRS
ZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHVi
SW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBzY3JhdGNoM0dQUiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdlQ29u
ZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRv
UHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7
CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCghSlND
Ojppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gaW5Cb3VuZHMg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgYXV0byB0
b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBq
aXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2Ny
YXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNG
b3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZEln
bm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQ
UlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0
YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0
Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTIxODMsNiArMjUzNCwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAg
ICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBz
aW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBj
YW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3Ig
dGhlc2Ugc2luY2UgdGhleQogICAgICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJl
IGNoZWNrcy4KQEAgLTIxOTYsMjIgKzI1NjAsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2Fz
ZTo6dG9UeXBlZEFycmF5VHlwZShBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNo
IChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50
ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1w
ZWQ7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgog
ICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAg
ICAgcmV0dXJuIFR5cGVGbG9hdDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBy
ZXR1cm4gVHlwZUZsb2F0NjQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIyODQsNiArMjY1NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNh
bkJlU2hhcmVkKGNvbnN0IEFjY2Vzc0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVk
U3RyaW5nTG9hZDoKICAgICBjYXNlIEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4
IDQxOWM5OWM5MGY0MzkwMTgwMWQ0YTk2MjExMDUwODk5YmFkZmQ5YmUuLjE4NjQ0YWQ1MTBmODBi
YmQ5NzUxZjgzNjY3MGZmOTBhOTMxMDg0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJ
bmRleGVkU3RyaW5nTG9hZAorICAgICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5k
ZXhlZEludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZSwKKyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAor
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlLAogICAgIH07CiAKICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3
YWQwZGY4ODIxMTA3ZmUzYjg0OTE3YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3
MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JQ1N0YXR1c01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0
YXR1c01hcC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgR2V0QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3Mg
UHV0QnlJZFN0YXR1czsKK2NsYXNzIFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7
CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0
OCw3IEBAIHN0cnVjdCBJQ1N0YXR1cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMg
eyBudWxscHRyIH07CiAgICAgR2V0QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAg
ICBJbkJ5U3RhdHVzKiBpblN0YXR1cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBw
dXRTdGF0dXMgeyBudWxscHRyIH07CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxw
dHIgfTsKICAgICBEZWxldGVCeVN0YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKaW5kZXggODEwNGEyZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4u
NDcxMzUxOWRiYTk0YjIxNGZjZTQ1NzEwZDc2YjIxMjNhZmQ3MGI3MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0x
MDIyLDYgKzEwMjIsNDUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFj
Y2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRT
dHJpbmdMb2FkOgogICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRTdHJpbmdMb2FkIik7CiAgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkRG91YmxlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
Q29udGlndW91c1N0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5
cGVkQXJyYXlJbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgICAgICBvdXQu
cHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA1YWZhYjlkMzljN2E0ZWE2ZTYxY2Y1NjQ4YWVmYWM5MGMxZjdjMmYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgotCi0jaW5j
bHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiQ29tcGxleEdldFN0YXR1cy5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
aCIKLSNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCkKLXsKLSAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFu
dHMsIHZhcmlhbnQpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OnNocmlua1RvRml0KCkKLXsK
LSAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBW
TSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwotICAgIAotICAgIGF1dG8gaW5zdHJ1Y3Rpb24g
PSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKLQotICAgIC8vIFdlIGFyZSBub3QgeWV0IHVzaW5nIGBjb21wdXRlRnJvbUxMSW50YCBpbiBh
bnkgcGxhY2UgZm9yIGBwdXRfcHJpdmF0ZV9uYW1lYC4KLSAgICAvLyBXZSBjYW4gYWRkIHN1cHBv
cnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdl
IGhhdmUKLSAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQu
Ci0gICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BQdXRQcml2YXRlTmFtZT4oKSk7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwotCi0gICAgU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwotICAgIGlm
ICghc3RydWN0dXJlSUQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKLQotICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKLSAgICBpZiAoIW5ld1N0cnVjdHVyZUlE
KSB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwot
ICAgIH0KLQotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAKLSAgICBBU1NFUlQoc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAKLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVj
dCgpKSkgewotICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
IHZtLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwotICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLVB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElD
U3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1
aWQpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChkaWRFeGl0KQotICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJ
bmZvOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURh
dGEpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChw
cm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIFVO
VVNFRF9QQVJBTShkaWRFeGl0KTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7
Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxp
bmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAotICAg
ICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1Yklu
Zm8pOwotICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhzdW1tYXJ5KTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5
cGUoKSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4K
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgIH0KLSAgICAgICAgCi0g
ICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxp
c3QgPSBzdHViSW5mby0+dS5zdHViOwotICAgICAgICAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBy
ZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChhY2Nlc3MudmlhUHJveHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3Mu
dXNlc1BvbHlQcm90bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCB2YXJpYW50OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFj
Y2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogewot
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgp
OwotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNl
dCgpOwotICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVW
YWxpZGl0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogewotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBs
ZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
YWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFi
bGU6IHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENh
bGxMaW5rU3RhdHVzPigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlu
a0luZm8oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRT
dGF0dXMuY29uZGl0aW9uU2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNh
bGxMaW5rU3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvclNldHRlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFy
aWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVz
dWx0LnNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotICAgIEV4
aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVj
b2RlSW5kZXgpOwotCi0gICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0
U3RhY2spIHsKLSAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmln
aW4pOwotICAgICAgICAKLSAgICAgICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlJZFN0
YXR1cyYgcmVzdWx0KSAtPiBQdXRCeUlkU3RhdHVzIHsKLSAgICAgICAgICAgIGlmICghY29udGV4
dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1
cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGJhc2Vs
aW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgIGJhc2Vs
aW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5l
UmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhp
dEZyb21JbmxpbmVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9u
KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgewotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBy
ZXN1bHQ7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBs
b2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCB1aWQs
IGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3Vs
dC5pc1NldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKLSAgICAgICAgICAg
IHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1
aWQsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3Qs
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKLXsKLSAgICBpZiAocGFy
c2VJbmRleCgqdWlkKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0KLSAgICBpZiAoc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoKTsKLSAgICAKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgUHV0QnlJ
ZFN0YXR1cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHNldFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1
Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCi0gICAgICAgICAgICAv
LyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1
Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAotICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRo
cm93IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVm
aW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yT3JWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlB
dHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+
cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
ICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhp
cyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KLSAgICAgICAgICAgICAgICAvLyBUaGF0IG1l
YW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRo
aW5nIGZpc2h5IGlzCi0gICAgICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5v
dCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAot
ICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRv
IHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3kuCi0gICAgICAgICAgICAgICAg
Ly8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9Ci0gICAgICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0
UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAotICAgICAgICAvLyBzaG91bGQgbmV2
ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQot
ICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZhdGUgZmll
bGQuIFdlIG5lZWQgdG8gdGFrZQotICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjcGV0
aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KLSAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xv
d1BhdGgpOwotCi0gICAgICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcg
YSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQotICAgICAg
ICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KLSAgICAKLSAgICAg
ICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJl
IGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZl
IHVwLCBzaW5jZQotICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0
aWVzIHRvIHN0cmluZ3MuCi0gICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2Jq
ZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
LSAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owot
ICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxk
UHV0S2luZC5pc05vbmUoKSk7Ci0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwotICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8vIFdlIG9ubHkg
b3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0
aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KLSAgICAg
ICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKCF0
cmFuc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIAotICAgICAg
ICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFu
c2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwotICAgICAgICBpZiAoIWRpZEFwcGVuZCkK
LSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0K
LSAgICAKLSAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
I2VuZGlmCi0KLWJvb2wgUHV0QnlJZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
aWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxscygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10
ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgZm9y
IChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKLSAgICAgICAgaWYgKCF2
YXJpYW50LmZpbmFsaXplKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWVyZ2UoY29uc3QgUHV0
QnlJZFN0YXR1cyYgb3RoZXIpCi17Ci0gICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZvcm1h
dGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZdICgp
IHsKLSAgICAgICAgKnRoaXMgPSBQdXRCeUlkU3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIu
bWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLSAgICB9OwotICAg
IAotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAg
ICAgKnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNp
bXBsZToKLSAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICAgICAg
cmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlk
VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWFw
cGVuZFZhcmlhbnQob3RoZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsK
LSAgICAgICAgfQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAg
ICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwotICAg
IGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJp
YW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChtX3Zhcmlh
bnRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci19Ci0KLXZv
aWQgUHV0QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3
aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgb3V0LnBy
aW50KCIoTm9JbmZvcm1hdGlvbikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBj
YXNlIFNpbXBsZToKLSAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyks
ICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRo
OgotICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODc4ZTI1MmRiNjlhYzU3MTNkYzhlOGY4YjY0NDAwMGNhZTYzMGIxZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiRXhp
dEZsYWcuaCIKLSNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgotI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgotI2luY2x1ZGUgIlN0dWJJ
bmZvU3VtbWFyeS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xh
c3MgVk07Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIFN0
cnVjdHVyZUNoYWluOwotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87Ci0KLXR5cGVkZWYgSGFzaE1h
cDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhh
c2g+IFN0dWJJbmZvTWFwOwotCi1jbGFzcyBQdXRCeUlkU3RhdHVzIGZpbmFsIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAg
Ly8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgICBOb0lu
Zm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBz
b21lIGtpbmQuCi0gICAgICAgIFNpbXBsZSwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRl
biB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgVGFrZXNTbG93UGF0aCwKLSAgICAgICAgLy8gSXQn
cyBrbm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4KLSAgICAgICAgTWFrZXNDYWxs
cwotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cygpCi0gICAgICAgIDogbV9zdGF0ZShO
b0luZm9ybWF0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0
YXR1cyhTdGF0ZSBzdGF0ZSkKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xv
d1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGlj
aXQgUHV0QnlJZFN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoc3VtbWFyeSkgewotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZv
cm1hdGlvbjoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgotICAgICAg
ICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2Ug
U3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgbV9zdGF0ZSA9IFRh
a2VzU2xvd1BhdGg7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKLSAgICAgICAgICAgIG1fc3RhdGUg
PSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRTdGF0
dXMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi0gICAgICAgIDogbV9zdGF0ZShTaW1w
bGUpCi0gICAgewotICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0
YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFn
LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7Ci0g
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2sm
IGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0KLSNp
ZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5m
byhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0j
ZW5kaWYKLSAgICAKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
LSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9y
bWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09
IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZSA9PSBTaW1wbGU7IH0KLSAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0g
ICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgUHV0QnlJZFN0YXR1cyBzbG93VmVyc2lv
bigpIGNvbnN0OwotICAgIAotICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFudHMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAx
PiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9Ci0gICAgY29uc3QgUHV0
QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tp
bmRleF07IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKLSAgICAKLSAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKLSAg
ICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0jaWYgRU5BQkxFKEpJ
VCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAg
IGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSk7Ci0jZW5kaWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxM
SW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwot
ICAgIAotICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAKLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3Rv
cjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTRkNjQ3ODJhOTY0MzkzMDlhZTlh
MWZhMDQ4YTM4NzI1NTIxZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2lu
Y2x1ZGUgIkhlYXBJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkVmFyaWFu
dDo6UHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIDogUHV0
QnlJZFZhcmlhbnQoKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikK
LXsKLSAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhl
ci5tX29sZFN0cnVjdHVyZTsKLSAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0
dXJlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7Ci0gICAgbV9v
ZmZzZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykK
LSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2FsbExpbmtTdGF0
dXMgPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0
QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0g
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAg
ICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUg
PSBvbGRTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJl
OwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1cykKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdU
Rk1vdmUoY2FsbExpbmtTdGF0dXMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cnVjdHVy
ZSogUHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAotewot
ICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgIH0KLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0
dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgbV9raW5kID0gUmVwbGFjZTsKLSAg
ICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50
Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAg
IGNhc2UgVHJhbnNpdGlvbjoKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQ
dXRCeUlkVmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtp
bmQoKSA9PSBTZXR0ZXI7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdl
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBpZiAobV9vZmZzZXQgIT0gb3Ro
ZXIubV9vZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9raW5k
KSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOiB7
Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZTog
ewotICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IG5ld1Zh
cmlhbnQgPSBvdGhlcjsKLSAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdl
VHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgewotICAgICAgICAgICAgICAgICp0aGlzID0g
bmV3VmFyaWFudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOgotICAgICAgICAgICAgcmV0dXJuIGF0dGVt
cHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAh
PSBvdGhlci5tX29sZFN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25l
d1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNl
dDsKLSAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChv
dGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNl
dDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICBjYXNlIFNldHRlcjogewotICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNl
dHRlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICht
X2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKLSAgICAgICAgICAg
IGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFt
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNl
dCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAg
ICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25k
aXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25k
aXRpb25TZXQ7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKLSAgICAg
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0
dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0gICAgCi0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUHV0QnlJ
ZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiByZXBsYWNlKQotewotICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7
Ci0gICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJlcGxhY2UpOwotICAgIEFTU0VSVChtX29m
ZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKLSAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3Ry
dWN0dXJlcygpKTsKLSAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOwot
ICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAg
Ly8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGgg
YWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCi0gICAgLy8gdHJhbnNpdGlvbnMg
dG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0
dXJlIFMuIFRoaXMgZG9lc24ndAotICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRl
IGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCi0gICAgCi0g
ICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3
U3RydWN0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbV9vbGRTdHJ1Y3R1
cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
ZmluYWxpemUoVk0mIHZtKQotewotICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZl
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAh
dm0uaGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2bSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+
ZmluYWxpemUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAg
ICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
Y2FzZSBSZXBsYWNlOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNl
dCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVHJh
bnNpdGlvbjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAi
LCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCi0gICAgICAgICAg
ICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAot
ICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIGNhc2UgU2V0dGVyOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFNldHRl
cjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAg
ICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBvdXQu
cHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwotICAgICAgICBvdXQucHJpbnQoIiwgY2Fs
bCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgb3V0LnByaW50KCI+Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE3NWE3M2EyZjhkNGI1ZTVmMGExZGU0MDhhNWZiYmQxY2I3YWIyNTkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNs
dWRlICJQcm9wZXJ0eU9mZnNldC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtTdGF0dXM7Ci0KLWNsYXNzIFB1dEJ5SWRWYXJp
YW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIEtp
bmQgewotICAgICAgICBOb3RTZXQsCi0gICAgICAgIFJlcGxhY2UsCi0gICAgICAgIFRyYW5zaXRp
b24sCi0gICAgICAgIFNldHRlcgotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoKQot
ICAgICAgICA6IG1fa2luZChOb3RTZXQpCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNl
dCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICBQdXRCeUlk
VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0KLSAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCi0gICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiwKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7
Ci0gICAgCi0gICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0g
ICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4g
bV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNp
dGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAg
cmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0g
VHJhbnNpdGlvbik7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLQotICAgIGJv
b2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdl
KCkgY29uc3Q7Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5z
aWNzIGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVk
IHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBj
b25zdCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQotCi0gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9y
IHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAg
ICB9Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUo
Vk0mKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi0gICAg
Ym9vbCBvdmVybGFwcyhjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKTsKLSAgICAKLSAgICBLaW5kIG1f
a2luZDsKLSAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICBTdHJ1Y3R1cmVTZXQgbV9v
bGRTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsK
LSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeVN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlT
dGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2YmNjYTY3Y2YxODZjNDZiZGEwMzMwNmJhMDQzYzA0MGZh
N2NhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlTdGF0dXMuY3BwCkBAIC0wLDAgKzEsNTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlB1dEJ5U3RhdHVzLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIK
KyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworYm9vbCBQdXRCeVN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZElD
U3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKK30KKwordm9pZCBQdXRCeVN0YXR1
czo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKK30KKwor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVk0mIHZtID0g
cHJvZmlsZWRCbG9jay0+dm0oKTsKKyAgICAKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmls
ZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisKKyAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9wdXRfYnlf
aWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAvLyBXZSBkbyBu
byBoYXZlIGEgY29kZSByZXRyaWV2aW5nIExMSW50IGluZm9ybWF0aW9uIGZvciBgb3BfcHV0X3By
aXZhdGVfbmFtZWAuCisgICAgICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhp
cyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQorICAgICAgICAv
LyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQuCisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICB9CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSAmKHByb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBpZGVudGlmaWVyLT5pbXBsKCk7CisKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1l
dGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CisgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKKyAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsK
KworICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1
cmVJRDsKKyAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVw
bGFjZShudWxscHRyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgfQorCisgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0
dXJlSUQpOworICAgIAorICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Cisg
ICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgeworICAgICAgICBjb25kaXRp
b25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgfQorICAgIAorICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24obnVsbHB0
ciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKK30KKwor
I2lmIEVOQUJMRShKSVQpCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklU
KQorICAgIGlmIChkaWRFeGl0KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChD
b2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1
bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
c3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURf
UEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQoreworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAg
ICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHVi
SW5mbyk7CisgICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhzdW1tYXJ5KTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5
cGUoKSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4K
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
CisgICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAg
ICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVy
KSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAg
ICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAg
ICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZp
ZXIoKSwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFw
cGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQg
PSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZp
ZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRl
cjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0
dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0
dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OklubGluZWFibGU6IHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBt
YWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZT4oKS5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5r
U3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNp
dGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNj
ZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBj
b21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAs
IElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKK3sKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKTsKKyAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0
ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2Nr
LCBieXRlY29kZUluZGV4KTsKKyAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0
U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNTdGF0dXND
b250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVzIHN0YXR1
cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gYmxl
c3MgPSBbJl0gKGNvbnN0IFB1dEJ5U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVzIHsKKyAg
ICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7CisgICAgICAg
ICAgICAgICAgUHV0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAorICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwg
ZGlkRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAg
ICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlk
RXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQuc2xvd1ZlcnNpb24oKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAgICAgICBQ
dXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAg
ICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCisgICAg
ICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJ
bmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgaXNE
aXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sKKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAocGFyc2VJ
bmRleCgqdWlkKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
CisgICAgaWYgKHNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cygpOwor
ICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBQdXRCeVN0YXR1cyBy
ZXN1bHQ7CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHNldFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0
cmlidXRlcyk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1
dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1l
YW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBu
ZWVkIHRvIHRha2UgCisgICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9u
LgorICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JW
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisK
KyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
ciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBX
YXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJl
cGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlz
IGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNo
cG9pbnQgc2V0LgorICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMg
cHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAg
ICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRo
ZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8g
SklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRv
IGhhdmUgYSBsYXp5IHRoaW5neS4KKyAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZl
IHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
UHV0QnlWYXJpYW50IHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwg
c3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdl
IGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQg
aXQKKyAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
YmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEg
bm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8g
c2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVz
aXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0
IHRoaXMgaXMgcmVhbGx5CisgICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5p
dHkgY2hlY2tzLgorICAgIAorICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMg
b24gZGljdGlvbmFyaWVzLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAg
ICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0
IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50
IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3RydWN0
dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOworICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAorICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsK
KyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJl
IHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgorICAgICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQp
OworICAgICAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OworICAgIAorICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KFB1
dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24s
IGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgIGlmICghZGlkQXBwZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAg
ICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisK
K2Jvb2wgUHV0QnlTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIGlmIChtX3N0YXRl
ID09IE1ha2VzQ2FsbHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChtX3N0
YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3Zhcmlh
bnRzW2ldLm1ha2VzQ2FsbHMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93
VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/
IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQ
dXRCeVN0YXR1czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmds
ZUlkZW50aWZpZXJGb3JJQ1N0YXR1cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShQdXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRC
eVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6
ZmluYWxpemUoVk0mIHZtKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykgeworICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRC
eVN0YXR1czo6bWVyZ2UoY29uc3QgUHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhl
ci5tX3N0YXRlID09IE5vSW5mb3JtYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBh
dXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7CisgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1h
a2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOworICAgIH07CisgICAgCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBO
b0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICBjYXNl
IE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNp
bXBsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJp
YW50cywgc2V0KTsKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAg
ICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbikiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAo
bV92YXJpYW50cyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBU
YWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIihN
YWtlc0NhbGxzKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMmEx
YzczYzhmNDFjYTE5MmU1OGQ0YmUxZGUxNjYxM2Q5MDAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJF
eGl0RmxhZy5oIgorI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZp
ZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJ
bmZvU3VtbWFyeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgVk07CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0
cnVjdHVyZUNoYWluOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1h
cDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhh
c2g+IFN0dWJJbmZvTWFwOworCitjbGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZv
cm1hdGlvbiwKKyAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgorICAgICAgICBTaW1wbGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCisgICAgICAgIFRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMK
KyAgICB9OworICAgIAorICAgIFB1dEJ5U3RhdHVzKCkKKyAgICAgICAgOiBtX3N0YXRlKE5vSW5m
b3JtYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhT
dGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgg
fHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0
QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHN1bW1hcnkpIHsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246
CisgICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZv
U3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQ
YXRoOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgICAgICBtX3N0YXRlID0gTWFrZXND
YWxsczsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAgewor
ICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAg
c3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmll
bGRQdXRLaW5kKTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXND
b250ZXh0U3RhY2smLCBDb2RlT3JpZ2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGlj
IFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdp
bik7CisjZW5kaWYKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxz
OyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1Zl
cnNpb24oKSBjb25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQ
dXRCeVZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tp
bmRleF07IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNp
bmdsZUlkZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25z
dCBQdXRCeVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9y
U3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXgpOworICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsK
KyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBW
ZWN0b3I8UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMwNjM4NGFiMWNlZWJhZjIxOGE0MDk5NjMzMjQ3MWUzZjEwMGE3NmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcApAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRC
eVZhcmlhbnQuaCIKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVh
cElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIu
bV9pZGVudGlmaWVyKQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYg
UHV0QnlWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAg
ICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29s
ZFN0cnVjdHVyZTsKKyAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwor
ICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQg
PSBvdGhlci5tX29mZnNldDsKKyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAg
ICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5t
X2NhbGxMaW5rU3RhdHVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBu
dWxscHRyOworICAgIG1faWRlbnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92
ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0
cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICBy
ZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBv
bGRTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwor
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1
dEJ5VmFyaWFudDo6c2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0
KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOworICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAy
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25U
b1JlcGxhY2VJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUu
c2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUo
KTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJl
W2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Cisg
ICAgbV9raW5kID0gUmVwbGFjZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwor
fQorCitib29sIFB1dEJ5VmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0
dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICgh
IW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1faWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1f
aWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAh
PSBvdGhlci5tX29mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxh
Y2U6IHsKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBs
YWNlOiB7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVj
dHVyZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5l
d1ZhcmlhbnQgPSBvdGhlcjsKKyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlz
ID0gbmV3VmFyaWFudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0
dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVy
ZSAhPSBvdGhlci5tX29sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5t
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0
aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9
IFNldHRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAg
ICAgIGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlv
blNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwor
ICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRD
b25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRD
b25kaXRpb25TZXQ7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAg
ICAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKKyAgICAgICAgCisgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3Ry
dWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0
QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRC
eVZhcmlhbnQmIHJlcGxhY2UpCit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsK
KyAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zm
c2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1
Y3R1cmVzKCkpOworICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Cisg
ICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAv
LyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBh
bG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0
byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1
cmUgUy4gVGhpcyBkb2Vzbid0CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUg
YW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAg
ICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVy
ZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6Zmlu
YWxpemUoVk0mIHZtKQoreworICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZt
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0u
aGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+Zmlu
YWxpemUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
ZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoIjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZp
ZXIsICInLCAiKTsKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAg
ICAgICBvdXQucHJpbnQoImVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgUmVwbGFjZToKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNl
dCgpLCAiLCAiLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJh
bnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIs
IGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAg
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisg
ICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZm
MGY2ODQ1ZWMxYjMxZWI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ2FsbExpbmtTdGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAg
Tm90U2V0LAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBT
ZXR0ZXIKKyAgICB9OworICAgIAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIpCisgICAgICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNl
dChpbnZhbGlkT2Zmc2V0KQorICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV9pZGVudGlmaWVyKFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJp
YW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlW
YXJpYW50IHJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlv
bihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgUHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4pOworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90
U2V0OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQor
ICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7
CisgICAgfQorICAgIAorICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCk7CisKKyAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxs
b2NhdGVzU3RvcmFnZSgpIGNvbnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAg
IAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlk
KSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMg
aW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMg
aXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4g
bV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1
cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAg
ICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0
ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghIW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAo
bV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJs
YXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJl
cGxhY2UpOworICAgIAorICAgIEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zm
c2V0OworICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1f
bmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1fY29uZGl0aW9uU2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdk
Mjk0NWQ2MjFhZGMzZWJhZDcuLmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJj
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5jcHAKQEAgLTYyLDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0
dXNlczo6YWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1
c2VzOjphZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmIHN0YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjph
ZGRQdXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0
YXR1cyYgc3RhdHVzKQogewotICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlk
U3RhdHVzPihzdGF0dXMpOwotICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5n
ZXQoKTsKKyAgICBhdXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1
cyk7CisgICAgUHV0QnlTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogZ2V0cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgIGZvciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMp
CiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZWxldGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNh
YTg2OGEzMjYzMjRiNS4uOTQ5ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNs
dWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQ
dXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQ
cml2YXRlQnJhbmRTdGF0dXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBA
IHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRk
Q2FsbExpbmtTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7
CiAgICAgR2V0QnlTdGF0dXMqIGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBHZXRCeVN0YXR1cyYpOwotICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyog
YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAg
ICAgSW5CeVN0YXR1cyogYWRkSW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5C
eVN0YXR1cyYpOwogICAgIERlbGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgRGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBS
ZWNvcmRlZFN0YXR1c2VzIHsKICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRT
dGF0dXM+Pj4gcHV0czsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5p
cXVlX3B0cjxQdXRCeVN0YXR1cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0
ZXM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXgg
NzU5MThmNjc3MzE4M2NkZmNlYjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUx
MDdhNzAxNmRhODgxYmNlZGY3ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJh
c2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZToKICAgICAgICAgcmVzZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0g
ICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlL
aW5kOjpCeUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFs
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAg
IHJlc2V0SW5CeShjb2RlQmxvY2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDcz
MDRmYjE1NGU4NDBkODVkYTI4ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmUyMjU0MGMwOWJjNzgzZTdk
OGUwNmQ1M2I3Y2E4MDg3MWVlNjcyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xh
c3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRC
eUlkLAogICAgIEdldEJ5VmFsLAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFs
LAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4MjEu
LjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1
cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJl
cygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFz
ZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVy
Z2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0aGlz
U2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSBy
ZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBuZXdT
ZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAsMTAg
KzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8
fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8gcHJp
dmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9k
ZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVj
dHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51
aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAg
ICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgICAg
ICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1Nl
dDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
UHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDog
dmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVy
ZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0
LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDczLDcg
KzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgogICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoK
LSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1Miwx
MCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0g
ICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVy
ZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZp
bHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgx
NWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2
YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0Vs
aW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
QEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYz
ZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNiZDYyN2IuLjdmNDAyZTY5N2Y5ZGEwN2E0
YzU1YWRhNTEyYzQ3OWRjNGYyMjM3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcgKzcz
LDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2YXRl
RmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhw
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVDb2Rl
UGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAg
ICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICAv
LyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0
QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhl
IHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJp
YW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9kZSog
c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlh
bnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2
b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRl
c3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAg
ICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwg
RUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2Rl
KiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwog
ICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1
dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMm
LAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNN
QU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7
CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVGaWVs
ZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00
NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAg
ICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVz
ZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAvLyB0
aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUg
cHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5IHJh
cmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJl
U2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRo
YXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1
dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVu
dC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0
dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdodCBu
b3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0aGlz
IHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVy
ZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1
OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVkVmFs
dWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUp
CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7
CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBs
YWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUo
KSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlh
bnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSog
YmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlz
RGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNt
YU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5
SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFkZFRv
R3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwg
T3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29s
IGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUp
CisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRl
Y29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8
fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRT
dGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5
U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFw
aChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNG
VEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5u
dW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkg
fHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNl
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlz
dFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8fCBw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlmIChw
dXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUs
IHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgoRmls
dGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwg
YmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRz
KCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
c3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9m
ZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52
YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRz
KCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwog
ICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwg
dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlk
U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3Rh
dHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRC
eUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7Cisg
ICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsK
IAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwx
MiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQu
Y29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01
MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6
OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlW
YXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBOb2Rl
KiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVj
dCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJp
dmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3Qg
UHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRl
RmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlv
bnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlz
U2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5u
dW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAg
IGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VP
U1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1
dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0
YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhp
Y0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7
CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2
YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGls
YXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3Rh
dHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlT
dGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAg
ICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRp
UHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFk
ZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsK
KyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAg
ICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRk
VG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0
QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
KTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAg
ICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9yZShi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRC
eUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQo
KSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9
IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3Rh
dHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNl
bGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgo
KSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNv
ZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVz
IG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZv
cm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8g
ZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwg
dGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0g
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlW
YWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29r
U2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5
T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5m
by0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3lt
Ym9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4g
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBp
ZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkp
OworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0g
c3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1
dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVz
LCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQ
dXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAgICAg
aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5
dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1NiwxMiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgcHV0
QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAgICAg
ICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51
bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2Rl
KCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUo
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAK
QEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQ
cm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAgICAg
ICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwg
UHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmllbGRQ
dXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6OlRh
a2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAh
PSAxCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBd
LnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNv
ZGUubV9zY29wZSksIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtODgxOSw0NSArODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQog
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJl
Y3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9v
bCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3Rh
dHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRl
eCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2Rl
IGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBu
dWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlv
bi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJ
bmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0
aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51
aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5p
c0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKworICAg
ICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVN
YXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCisgICAgICAgIGlm
IChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmll
cigpKSB7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51
aWQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0Nl
bGwoKSkgeworICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNTeW1ib2xDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXVpZC0+aXNTeW1ib2woKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
SWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1
cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
aWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwg
Ynl0ZWNvZGUubV9lY21hTW9kZSk7CisgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRy
dWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAg
ICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2Vj
bWFNb2RlKTsKICAgICB9CiAKICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2
YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2Yz
MGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBA
IC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2
ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcApAQCAtODEsNyArODEsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmlu
ZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0
ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3
IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBk
YXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25s
eVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0
YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1
dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwg
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQog
ICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxk
RWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJh
bnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFw
aC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEy
NjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9y
YWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsK
IAotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApA
QCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIo
KS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAg
ICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0
YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkp
IHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0
YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYs
NyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2Up
OworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlz
Tm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBD
b25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5k
bGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRv
IGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0
dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3Rh
dHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3Rh
dHVzKSksCiAgICAgICAgICAgICBFZGdlKGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlk
YjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUx
ODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0y
NDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5kZTRm
MjNmYmFhMGM5NmRiYzhhYWM1MjQ5MTUzZjk4NmUzOThhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI4NjUsNyArMjg2NSw3IEBAIGNsYXNz
IEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIENQVUludHJpbnNpYzoK
ICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CmluZGV4IGE4NDA2OGU3NzQ2YzlkYzQzOTQxZTUxYzhlMzE1ZGE3MzVkZmUwZjMuLjBhYTgwZmYw
NjFhOTZiMGQ1MzVkNjA4ZjBhOTUwODc2MzhmODZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCkBAIC0zODUsOCArMzg1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250
ZXgKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+Z2V0QnlTdGF0dXMoKSk7CiAgICAg
aWYgKG5vZGUtPmhhc0luQnlTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9k
ZS0+aW5CeVN0YXR1cygpKTsKLSAgICBpZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChu
b2RlLT5oYXNQdXRCeVN0YXR1cygpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5w
dXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpLnRvUmF3KCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggOTEwY2YxMzk5
ZmM2YzlkYjFhN2M1NDRmYTFjYTk4YmQyM2NiM2M2OS4uMTJmMjlmMTA3MTU4YWZiMDBjNjU4YTZk
ZjQzOWE3OTE4NDJlODgwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKQEAgLTI1Miw2ICsyNTIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
c1dpdGhUaGlzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5
VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywg
bGlua0J1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIGxpbmtC
dWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIGxpbmtCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBsaW5rQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDk2YmZjNWEzMDM5YTM2MGZk
MTBhYTQwOTRmNTcwNjBhN2NkYTlhOTIuLjM2MTc0Nzc4MWZjZDZlNzkxNWU3YTI1OTY4NDY1ZDA3
YjY5MWIyOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
QEAgLTE5OSw2ICsxOTksMTEgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxw
ZXJzIHsKICAgICAgICAgbV9wdXRCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFB1
dEJ5VmFsKGNvbnN0IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9y
KiBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIG1fcHV0QnlWYWxzLmFwcGVuZChJbmxpbmVDYWNo
ZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKKyAgICB9CisK
ICAgICB2b2lkIGFkZERlbEJ5SWQoY29uc3QgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93
UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2RlbEJ5SWRzLmFwcGVu
ZChJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkp
OwpAQCAtMzYwLDYgKzM2NSw3IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVs
cGVycyB7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlWYWxzOwogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJZHM7
CisgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4sIDQ+
IG1fcHV0QnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdl
bmVyYXRvcj4sIDQ+IG1fZGVsQnlJZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxK
SVREZWxCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fZGVsQnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVD
YWNoZVdyYXBwZXI8SklUSW5CeUlkR2VuZXJhdG9yPiwgND4gbV9pbkJ5SWRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggZWM1YThmYjZlYWNlMjlkMzVlZDA1
N2NkNjRmMGQ2ZjQ2NDY2NGQwZi4uMmJkNGFlNDUzNTA0Y2Q2Yjc4ZDhkOTFlMjQ5YjIwZmE3MzBj
M2M4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMDYs
NyArMTA2LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBTdGF0ZVR5cGUmIHN0YXRlKQogICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZs
eToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggYWMyYjRiNWYwMjgzOWM4YWJhYTFkMzli
MzUxZDI3N2ExOWJkMWM5YS4uN2NhYTIwMjAxMmRjYTU4YmRiOTg2OTU4NjQ0NmEyNDhhNThlMzNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFy
aWFudC5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVC
cmFuZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlR5
cGVMb2NhdGlvbi5oIgpAQCAtOTIsNyArOTIsNyBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEg
ewogCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXI7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICBW
ZWN0b3I8UHV0QnlWYXJpYW50LCAyPiB2YXJpYW50czsKICAgICAKICAgICBib29sIHdyaXRlc1N0
cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwpA
QCAtMzIxMCwxNSArMzIxMCwxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxJbkJ5U3RhdHVzKj4oKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNQdXRCeUlk
U3RhdHVzKCkKKyAgICBib29sIGhhc1B1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IEZpbHRlclB1dEJ5SWRTdGF0dXM7CisgICAgICAgIHJldHVybiBvcCgpID09IEZp
bHRlclB1dEJ5U3RhdHVzOwogICAgIH0KICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRCeUlk
U3RhdHVzKCkKKyAgICBQdXRCeVN0YXR1cyogcHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGhhc1B1dEJ5SWRTdGF0dXMoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mby5hczxQ
dXRCeUlkU3RhdHVzKj4oKTsKKyAgICAgICAgQVNTRVJUKGhhc1B1dEJ5U3RhdHVzKCkpOworICAg
ICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlTdGF0dXMqPigpOwogICAgIH0KIAogICAgIGJv
b2wgaGFzRGVsZXRlQnlTdGF0dXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCmluZGV4IGU3NWJjZmU4YTFhYzM3MWEwMmU1NjU0OTZiOTg3OGQ5ODdlZTRhZDAuLjlhOTBh
NGNmZGFjOGYyMzUxODI4NzIyNGVkYmVlNWZkODlmNjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTU0Niw3ICs1NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJHZXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZpbHRlckluQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhGaWx0ZXJQdXRCeUlkU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oRmlsdGVyUHV0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0
ZXJEZWxldGVCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZk
NThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBj
YXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5
cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0
IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUg
aGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2
ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
PnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51
bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFj
ZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBA
QCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJl
Y2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFw
U2V0OgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5
YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICsz
NTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IGFiYzhkMThh
YTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUuLjVkYTA0Mzg3YjZkMGVlODk4NzQ4YzI5
ZWM3Nzg2NGZiYzkxZWIwZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5
NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1
MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApp
bmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3
NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1
dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZn
U2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4
IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMw
ZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5
Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAw
M2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEw
NDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToK
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBiMDAxZDEz
MmYwMmZmYzM4MjUzYzM4ZGYyZTQ5YjBjZjM2ZTYyZjY2Li5hNTQzODA5NjU4MGU0MmY3NTE1NDZk
MzU5YmNiMDQxMWRmZDQ4NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMg
ewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4
OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2Us
IDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAg
ICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07
KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAg
ICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBA
IGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3Nb
aV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRh
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZh
cmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2Jq
ZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5z
aXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50
cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2Vt
YW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5
ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5k
ZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24o
KS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
LT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09
IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4
NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBA
QCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2Rl
X3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgot
I2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2lu
Y2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAwYjRjMmI5YmUw
ZjVmZmYxNTFhM2IwN2U5YWEyNGZjY2Y5MDUwMzk4Li40MTE4NmRiZTk0MjA5NjI3MDBhNWI5NzY5
MTNmZjBhN2IyNGI3YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKQEAgLTEzNTcsNyArMTM1Nyw4IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1
YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAgIHZvaWQgdW5ib3hEb3VibGUoR1BSUmVn
IHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIEZQUlJlZyBmcHIsIEZQUlJlZyBzY3JhdGNoRlBS
KQogICAgIHsKLSAgICAgICAgbW92ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZw
ciwgc2NyYXRjaEZQUik7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoRlBSKTsKKyAgICAg
ICAgbW92ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwcik7CiAgICAgfQogICAg
IAogICAgIHZvaWQgYm94RG91YmxlKEZQUlJlZyBmcHIsIEpTVmFsdWVSZWdzIHJlZ3MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUw
MDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0
cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVs
ZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkg
XAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlk
U2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0
QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAg
ICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAg
ICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdp
dGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEz
NzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYx
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7
CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAw
OworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAg
bV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2
NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXpl
KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6
ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMu
c2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5z
aXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFu
Y2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0lu
ZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMs
IHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRo
aXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBw
YXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNo
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCmluZGV4IDRkYTdhMmZkNjZmMTUwY2ZjZDM1OTAyZmU5M2U1NGZlZDJh
NWFkMmUuLjBkZGRmZjQ5MmJhMzFiZmYwNGEwNTBiNzRiMzIxMmRhNjIxY2VmYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZh
dGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5t
X2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBq
aXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
LSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+
KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRL
aW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7
Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNzUsMTAgKzI1Myw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29t
cGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1
dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRy
LCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMTA4Myw2ICsxMDU3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7
CiAgICAgICAgIFZlY3RvcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNX
aXRoVGhpczsKICAgICAgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7
CisgICAgICAgIFZlY3RvcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAg
ICAgIFZlY3RvcjxKSVRJbkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9y
PEpJVEluQnlWYWxHZW5lcmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxC
eUlkR2VuZXJhdG9yPiBtX2RlbEJ5SWRzOwpAQCAtMTExMCw2ICsxMDg1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAg
ICAgICB1bnNpZ25lZCBtX3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2ln
bmVkIG1fcHV0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5C
eUlkSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7
IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFY
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCmluZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNm
NjQuLmE5MGM4NjlkMzk3OTk3NmM2ZmZhNmVkZDIzZmMzMjYzNDQyZjU5ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CkBAIC0xNDIsNyArMTQyLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNo
LCAKICAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJ
VEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIp
CisgICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2
YWx1ZSwgc3R1YkluZm9HUFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAg
ICAgLCBtX3B1dEtpbmQocHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjcgQEAgdm9pZCBKSVRH
ZXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZm
ZXImIHNsb3dQYXRoKQogICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZv
LT5zbG93UGF0aFN0YXJ0TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCisgICAg
OiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNj
ZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCisgICAg
LCBtX3B1dEtpbmQocHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwgbV92YWx1ZSh2
YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsK
KworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0
dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigpOworICAgIG1f
c3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8t
PnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5wcm9wZXJ0
eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklUUHV0QnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAg
ICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGppdC5jYWxs
KENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRv
cjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQor
eworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9z
dHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlvbl9HU3Np
SkpDIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAgICBzd2l0
Y2ggKG1fcHV0S2luZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICBp
ZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgaWYgKG1f
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmU6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICBBU1NF
UlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4g
cG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0
MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uMzA1YjcwZDNmOTJiMWZlM2I1YTY2
N2RiMzM0NGJiNjY3ZDZmYjQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9y
IHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBt
X2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAg
Q29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdz
IGJhc2UsCkBAIC0xNDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lK
SkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1v
ZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAg
IFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
cigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIHN0dWJJ
bmZvR1BSLCBFQ01BTW9kZSwgUHV0S2luZCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
bG93UGF0aEp1bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1w
Lm1fanVtcC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsK
KyAgICB9CisKKyAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZl
ciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworCisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBz
bG93UGF0aEZ1bmN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7
IEVDTUFNb2RlOjpzdHJpY3QoKSB9OworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNW
YWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA3NWRjN2MzNjlmMmFkM2ZhYjMyMGI4ZWI3OWZjN2Q3
NTNmNjgwOGY5Li40NGRiYTBlZDE1NTNhNjU0YTJmNGY3ZmZmZjBhZmIxOGYwMWY1YjQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTcxOSw3ICs3
MTksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzUxLDcgKzc1MSw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwg
aWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzgyLDcgKzc4Miw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwg
aWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywg
UHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5m
bywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC04MTMsNyArODEzLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlm
IChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBp
ZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFB1dFByaXZhdGVGaWVsZENhbGxiYWNrPgpAQCAtODg4LDcgKzg4OCw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemUsIHZvaWQsCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNz
VHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwog
CiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywg
b2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1
dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKICAgICB9
KTsKIH0KIApAQCAtOTI0LDE2ICs5MjQsMTUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEoKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJ
bmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50
aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOworICAgICAgICAgICAgcmVwYXRj
aFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUs
IGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOwogICAgIH0pOwogfQogCi1zdGF0aWMgdm9pZCBwdXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNW
YWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01B
TW9kZSBlY21hTW9kZSkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2
YWx1ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4
ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7CiAgICAg
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CkBAIC05NDIsNyArOTQxLDggQEAgc3RhdGljIHZv
aWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFs
dWUsIEpTVmFsdWUgc3UKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwor
ICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGdsb2Jh
bE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtOTUxLDMyICs5NTEsMzAgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChnbG9iYWxP
YmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIH0gCisgICAgfQorCiAgICAgaWYgKHN1YnNjcmlwdC5pc051bWJlcigpKSB7Ci0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9m
Qm91bmRzKCk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91
dE9mQm91bmRzKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAvLyBEb24ndCBwdXQgdG8g
YW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8g
JiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNj
cmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkp
OwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUs
IHNsb3QpOwogfQogCi1zdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpT
VmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkKK3N0
YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF5YmVJbmRleCA9
IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpbmRleCA9ICptYXliZUluZGV4
OwogCiAgICAgICAgIHN3aXRjaCAoYmFzZU9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTk4
OCw3ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAg
ICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRP
dXRPZkJvdW5kcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTAwMiwx
NSArMTAwMSwxMSBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
aW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZU9i
amVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwg
MCwgZWNtYU1vZGUuaXNTdHJpY3QoKSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXRE
aXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlk
KCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9i
amVjdCwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJl
Y3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHksIHZhbHVl
LCBzbG90KTsKQEAgLTEwMjMsMjI2ICsxMDE4LDIwNiBAQCBlbnVtIGNsYXNzIE9wdGltaXphdGlv
blJlc3VsdCB7CiAgICAgR2l2ZVVwLAogfTsKIAotc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0
cnlQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpT
VmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRCeVZhbE9wdGltaXpl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLQotICAgIC8vIFNlZSBpZiBp
dCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKLQogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNDb3B5
T25Xcml0ZShiYXNlVmFsdWUuZ2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSkKLSAgICAgICAg
cmV0dXJuIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotCi0gICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0KLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGlu
ZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAg
ICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVy
ZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJy
YXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CisgICAgICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01v
ZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBh
dGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5k
IHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRv
bid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJl
c3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVy
ZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgICAgICBpZiAoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAg
ICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7
CisgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9k
ZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgaWYgKGJh
c2VWYWx1ZS5pc09iamVjdCgpICYmIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRl
bnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsK
LSAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAh
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0
QnlWYWw+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6
Tm90RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2Vu
ZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJz
Y3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Q29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVl
KTsKKyAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJz
Y3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJD
YWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5
VmFsLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQg
IT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0ICE9
IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFrZSBz
bG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1
cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNl
cyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmplY3Rz
LCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRv
IG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgcHV0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBo
aWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcmVz
dWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49
IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogfQogCi1KU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmls
ZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0
ID0gdHJ5UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2Nr
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9S
RVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAg
ICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAg
ICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWMpOwotICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8s
IGVjbWFNb2RlKSk7CisKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywg
cHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotc3RhdGljIE9wdGltaXphdGlvblJl
c3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3Qq
IG9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewotICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
Ci0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1p
emF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90
T3B0aW1pemVkOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKIAorICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBw
cm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlw
dCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQorewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCgh
YnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAg
ICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0RGlyZWN0KGFycmF5TW9kZSkgJiYgYXJy
YXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7CisgICAgaWYgKCFpc0NvcHlPbldyaXRl
KGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CiAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLQotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgICAgICAgICAgICAg
IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAg
ICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBp
bnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1l
cy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6
Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQotICAg
ICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7
Ci0gICAgfSBlbHNlIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXApOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
ICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5
dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0
aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bERpcmVjdD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5k
OjpEaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5l
cmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
Q2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNj
cmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7
CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlz
U3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CisKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJl
Zm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0
RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworCisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworCisgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1
bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFr
ZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtl
IHN1cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBj
YXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmpl
Y3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVz
IHRvIG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1v
cnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUg
cmVzdWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50
ID49IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXA7Ci0gICAgfQorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0
UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9m
aWxlLCBlY21hTW9kZSkpOwogCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0KIAot
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9k
ZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwog
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQp
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0
cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
LSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAg
IC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAg
ICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIG9iamVjdCwgc3Vic2NyaXB0LCB2
YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlw
dCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJy
YXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICAKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJ
bmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChn
bG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21h
TW9kZSk7CisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZh
bChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNN
QU1vZGU6OnN0cmljdCgpKTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0
LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KIAotSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxl
KiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAK
KwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFs
dWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJz
Y3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgZGlyZWN0
UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZh
bHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGgg
PSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNl
VmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwor
fQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwor
CisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZh
bChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHBy
b2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5kKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggY2QzZTFiZDQxNGVjZDE3
MGJhNGEyNTU4OTM4ZjFlZDU0NDNhYjg5NS4uZDhmZDFlNzQ2NDI4MWU2ZWQwZTZjYzc0ZTM0Yzcw
MjVhYjdkNWFlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
QEAgLTIwMywxMCArMjAzLDE1IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJ
bmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUp
KTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5
VmFsSW5mbyosIEVDTUFNb2RlKSk7CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CiAKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBFQ01BTW9kZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiwgSlNH
bG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGQzOWJjNmQ3NTNkNjRkNmVmNzNhNzhh
NDVmOGI5ZjY1ODI1MzcyM2YuLmFmMmY4ZDI0Mzk0Y2RhNDg1NjI1NmViZjQ1YTljYTc1NGQ0NjEx
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCkBAIC00MzgsNjUgKzQzOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAg
ICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRL
aW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJ
c0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAgICBp
ZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIoZ2V0
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMyk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5j
aElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5
VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0g
ICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOwotICAgICAg
ICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlZSBj
b21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdU
MSwgcmVnVDEpOwotICAgIH0KICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QyLCBwcm9maWxlKTsKIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRo
aXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRl
eGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3Nl
QXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50
MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRU
eXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBi
eVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJh
ZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMyksIHJlZ1QyLCBlY21hTW9kZSwgcHV0S2luZCk7CisgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
LSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9wdXRCeVZh
bHMuYXBwZW5kKGdlbik7CisKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVj
ZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYxLDEyICs2MjcsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0
cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRv
IGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2Vj
bWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc0LDE2ICs2NDMsMTQgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgr
K107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0g
bGFiZWwoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZElt
bTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02OTQs
MjggKzY2MSwyNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJn
dW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRH
UFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9u
ID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8t
Pm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0g
Y2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTczNiwxOCArNzAxLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BS
ID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2Jq
ZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21h
TW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5
VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAg
ICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAg
ICAgICAgIGppdC5yZXQoKTsKIApAQCAtODA5LDEzICs3NzQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJ
bmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9
IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBi
eVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1
dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwpAQCAtODUxLDE0ICs4MTYsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50
R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAK
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGds
b2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAK
LSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIs
IGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsK
ICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkwLDgyICszMjU1LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0g
ZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7
Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBu
ZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRB
cnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6
IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAg
ICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29t
ZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNo
ZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJn
ZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJU
KHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgp
KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2Zh
ckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0g
Y3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owot
ICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZm
ZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92
YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9
IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJv
dXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEo
KSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5m
by0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAg
YnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVK
dW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBm
dW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChK
SVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNw
ZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJ
bmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7
Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDcsNTMgKzMyOTYsNiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9w
X3B1dF9ieV92YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0KLSAgICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQo
Ynl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOwot
Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBi
eVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNl
cywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVt
cHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFs
SW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRl
IDogbV9uZWFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAg
ICB9Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsKLSAgICAg
ICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXplKHBh
dGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVy
LCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3
aXRoIGNhY2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVy
dHlOYW1lLnVpZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRh
KCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8tPnN0dWJJ
bmZvID0gZ2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFy
Z2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09w
ZXJhdGlvbiA9IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90SW5kZXhK
dW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0g
ICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0
cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0
aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4oQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7
Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxP
cFB1dEJ5VmFsRGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBD
YWNoZWFibGVJZGVudGlmaWVyKTsKLQogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVMb2Fk
KGNvbnN0IEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8pCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM3MDksNyArMzU1MSw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKICAgICBkb3Vi
bGVDYXNlLmxpbmsodGhpcyk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwg
bGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92
ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1Qx
KTsKKyAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVn
VDApOwogICAgIHJlYWR5LmxpbmsodGhpcyk7CiAjZW5kaWYKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDc1
ZDBiZDdmNmVmMzVjNzYyNzMxM2YyNmJhNjVhMTY4ZDgzYjk0NTYuLmI5OGJmZWNlZGFhNTU2MDFm
OTVhODhiZWRhNjFiMDlmMWEzNDM0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNTQ1LDcgKzU0NSw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29k
ZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKICAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKICAgICAgICAgbm90SW50
LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1QxLCBmcFJl
Z1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZw
UmVnVDApOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsK
ICAgICAgICAgcmVhZHkubGluayh0aGlzKTsKICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwg
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKaW5kZXggMzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAw
OTY0NC4uNGI3MWEwZmE5ZmQ5OTAzMTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJl
cGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKUwogICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNs
b3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3QpCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtp
bmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7
Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdDsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0
QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBw
eQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUo
Jm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQg
cHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAo
cHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAo
cHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1
dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBj
b21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNo
LCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtODE3LDEyICs4NTgsMTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFj
Y2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nh
c2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKICAgICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nh
c2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/
IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBX
VEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVt
cCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVt
cCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQu
Y29kZSgpKTsKIApAQCAtODM1LDEyICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
CiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0
QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0g
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2Fj
aGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2
ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBw
dXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAg
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGds
b2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBl
OworICAgICAgICBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0p
LT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
VWludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJ
bnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6
ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAg
IGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
U2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAg
ICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hh
cGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQz
MlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVT
aGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERv
dWJsZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRDb250aWd1b3VzU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1
YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01B
TW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRT
b21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdp
dGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNo
cG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUg
OiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0
ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3
ICsxMTIxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAg
ICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
IHsKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEs
NTUgQEAgdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRC
eUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2
b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVj
bHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rp
b25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlw
ZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKLSAgICBGdW5jdGlvblR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
KQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUo
Jm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9u
VHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+
KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUp
CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAg
IHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWlu
dGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgIH0KIAogICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0
YWJkNjM3M2MwYWMzNjI5ZDhlNi4uZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzlj
N2RlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBA
IGVudW0gY2xhc3MgR2V0QnlLaW5kIHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVt
IGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xh
c3MgRGVsQnlLaW5kIHsKICAgICBCeUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVu
dW0gY2xhc3MgSW5CeUtpbmQgewogCiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7
CiB2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0
ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJ
bkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3
YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlu
a1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0m
LCBDYWxsTGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRH
ZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJl
c2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1
dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVz
ZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lk
IHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZv
aWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5o
CmluZGV4IDdlZWE3NTg3MGU3YjE1Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5
MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMwNmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9y
IHRoZSBvcGNvZGUgbmFtZXMuIFRoaXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNv
ZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJl
Y2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3Rh
dHVzLmNwcCkKIC8vIHdoaWNoIHJlZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0
byBiZSBwcmVmaXhlZCB3aXRoICJsbGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0
aW9uLCB0aGUgMiBhcmUgZXF1aXZhbGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlh
cyBoZXJlLgo=
</data>
<flag name="commit-queue"
          id="458731"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435828</attachid>
            <date>2021-08-18 19:31:38 -0700</date>
            <delta_ts>2021-08-18 22:54:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210818193137.patch</filename>
            <type>text/plain</type>
            <size>274789</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmNlYzMwNTM4MDM2MzFlNmRiOTg4ZTQ5Yzk2OGE5NjFiMmEwNmE0Li5lNjUxNDI3NTg1NTk0ZGY0
MDZkMzM5ZTg5ZjZiYzY4NzMxZjQ1YWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjEtMDgtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5y
YjoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0
QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJ
RCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEtMDgtMTYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSB0aGF0IHVudXNlZCBMTEludCBvcGNvZGVzIGFy
ZSBub3QgaW5hZHZlcnRlbnRseSB1c2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwZDFjYjMyNmJlNzA1ZDczMzkxZDE1ZWY0N2U3NGE5OTRmYzE4OThjLi5lYjBjMWM4NGJhMGZk
NjcwNGYzZjE4Y2JkODNmZmM4NTkwYjQzZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09i
amVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3RERE
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZp
c2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRS
ZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMz
MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2NywxMSArMjg2NywxMSBAQAogCQkwRjkzMzI5NDE0
Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRB
ODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQg
LyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEw
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04Njk4LDEwICs4Njk4LDEwIEBACiAJCQkJMEZE
M0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYx
NUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNE
MjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAg
Ki8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAq
LywKQEAgLTEwNTEwLDggKzEwNTEwLDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEg
LyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFF
NzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAz
MUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0
QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUz
MTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5
dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2Fz
ZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5j
cHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJh
bmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCmluZGV4IGRmODgzODZhODMyM2Q4NjkxMmNmZTUzNTMxZTNh
ODJkZmI0NGViOGUuLjkxMTdiYjg0NGM2MDdlYjVlNTIzM2ZiMzhhNDUyMjRiNDY3MzY0NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCkBAIC0xMDAxLDkgKzEwMDEsOCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB2b2lkIG1vdmVJbnRzVG9E
b3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgICAgICBtX2Fzc2Vt
Ymxlci52bW92KGRlc3QsIHNyYzEsIHNyYzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKaW5kZXggMTQ0NWM3
OTFiMjhjZWY1ZGZjMTU2YzMxMjRjNmE0ZTIyMjFhYzFhNC4uNzRkMTI3NjI1YTc3YjUxMTY5YmFk
ZjlhZDM1YzdlODViMzUzOWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCkBAIC0yMDcyLDkgKzIwNzIsOCBAQCBjbGFz
cyBNYWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3Nl
bWJsZXI+IHsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0MSwgZGVzdDIsIHNyYyk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0
ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAg
dm9pZCBtb3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBG
UFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYu
aAppbmRleCA4ZDAyMmUzYjgyNWY1OGQyZWY0ODgyMWIxYzJhOTQyNTY5MWQxYjQ5Li5hNjY5OTU5
NzA1NTBhOWFiNTFjZDI2ZDQ5MTk1NjY4ZjNiMGM5NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCkBAIC0xODMsMTQgKzE4
Myw2IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2IDogcHVibGljIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uIHsKICAgICAgICAgbW92ZUZsb2F0VG8zMihzcmMsIGRlc3QxKTsKICAgICB9CiAKLSAg
ICB2b2lkIG1vdmVJbnRzVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIs
IEZQUmVnaXN0ZXJJRCBkZXN0LCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKLSAgICB7Ci0gICAgICAg
IG1vdmUzMlRvRmxvYXQoc3JjMSwgZGVzdCk7Ci0gICAgICAgIG1vdmUzMlRvRmxvYXQoc3JjMiwg
c2NyYXRjaCk7Ci0gICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNo
KTsKLSAgICAgICAgb3JQYWNrZWQoc2NyYXRjaCwgZGVzdCk7Ci0gICAgfQotCiAgICAgSnVtcCBi
cmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKGltbS5t
X3ZhbHVlLCBkZXN0Lm1fcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMz
NWI2Li45OGUwYjE5NjA5YjMxNGZjNDQzY2ZlNmU3NjNiYzU1MjZlZDdkYWM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwx
OSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1
MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNv
bnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3Nywy
NCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3Vi
bGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAg
ICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZN
JiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgp
ID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtMTE5OSw5
ICsxMzAzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CkBAIC0xMjI3LDE2ICsxMzI4LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9m
Qm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGpp
dC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBp
c0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKQEAgLTEyNjIsMjEgKzEzNjMsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkg
ewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52
YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQu
YnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZEln
bm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAg
ICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwot
ICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUo
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7
Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gz
R1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzg3LDI2NiBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VS
ZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkg
JiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNv
dWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNo
ZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOworCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0
b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisjZW5kaWYKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90eXBl
ID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAgICAg
ICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlH
UFIsIHNjcmF0Y2gyR1BSKTsKKworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFu
Y2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3Rl
ZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091
dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJ
bnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAg
ICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRU
b0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsK
KyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIo
KSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0
ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1
ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRk
ZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmUpIHsKICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0
KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBQcm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LmJyYW5j
aDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQorICAgICAgICAgICAg
Ly8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAg
ICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVn
aXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOiB7CisgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhh
dCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5Lgor
CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7
CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKwor
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKSk7
CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQorICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKHZhbHVlUmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIg
IT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNhc2UgPSBqaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAg
ICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBkb3VibGVDYXNlLmxp
bmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKHNjcmF0Y2hHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vsc2UKKyAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQ
Uik7CisjZW5kaWYKKyAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRS
ZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHVi
SW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBzY3JhdGNoM0dQUiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdlQ29u
ZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRv
UHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7
CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCghSlND
Ojppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gaW5Cb3VuZHMg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgYXV0byB0
b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBq
aXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2Ny
YXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNG
b3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZEln
bm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQ
UlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0
YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0
Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTIxODMsNiArMjUzNCwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAg
ICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBz
aW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBj
YW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3Ig
dGhlc2Ugc2luY2UgdGhleQogICAgICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJl
IGNoZWNrcy4KQEAgLTIxOTYsMjIgKzI1NjAsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2Fz
ZTo6dG9UeXBlZEFycmF5VHlwZShBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNo
IChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50
ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1w
ZWQ7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgog
ICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAg
ICAgcmV0dXJuIFR5cGVGbG9hdDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBy
ZXR1cm4gVHlwZUZsb2F0NjQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIyODQsNiArMjY1NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNh
bkJlU2hhcmVkKGNvbnN0IEFjY2Vzc0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVk
U3RyaW5nTG9hZDoKICAgICBjYXNlIEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4
IDQxOWM5OWM5MGY0MzkwMTgwMWQ0YTk2MjExMDUwODk5YmFkZmQ5YmUuLjE4NjQ0YWQ1MTBmODBi
YmQ5NzUxZjgzNjY3MGZmOTBhOTMxMDg0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJ
bmRleGVkU3RyaW5nTG9hZAorICAgICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5k
ZXhlZEludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZSwKKyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAor
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlLAogICAgIH07CiAKICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3
YWQwZGY4ODIxMTA3ZmUzYjg0OTE3YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3
MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JQ1N0YXR1c01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0
YXR1c01hcC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgR2V0QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3Mg
UHV0QnlJZFN0YXR1czsKK2NsYXNzIFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7
CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0
OCw3IEBAIHN0cnVjdCBJQ1N0YXR1cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMg
eyBudWxscHRyIH07CiAgICAgR2V0QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAg
ICBJbkJ5U3RhdHVzKiBpblN0YXR1cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBw
dXRTdGF0dXMgeyBudWxscHRyIH07CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxw
dHIgfTsKICAgICBEZWxldGVCeVN0YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKaW5kZXggODEwNGEyZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4u
NDcxMzUxOWRiYTk0YjIxNGZjZTQ1NzEwZDc2YjIxMjNhZmQ3MGI3MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0x
MDIyLDYgKzEwMjIsNDUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFj
Y2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRT
dHJpbmdMb2FkOgogICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRTdHJpbmdMb2FkIik7CiAgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkRG91YmxlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
Q29udGlndW91c1N0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5
cGVkQXJyYXlJbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgICAgICBvdXQu
cHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA1YWZhYjlkMzljN2E0ZWE2ZTYxY2Y1NjQ4YWVmYWM5MGMxZjdjMmYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgotCi0jaW5j
bHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiQ29tcGxleEdldFN0YXR1cy5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
aCIKLSNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCkKLXsKLSAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFu
dHMsIHZhcmlhbnQpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OnNocmlua1RvRml0KCkKLXsK
LSAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBW
TSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwotICAgIAotICAgIGF1dG8gaW5zdHJ1Y3Rpb24g
PSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKLQotICAgIC8vIFdlIGFyZSBub3QgeWV0IHVzaW5nIGBjb21wdXRlRnJvbUxMSW50YCBpbiBh
bnkgcGxhY2UgZm9yIGBwdXRfcHJpdmF0ZV9uYW1lYC4KLSAgICAvLyBXZSBjYW4gYWRkIHN1cHBv
cnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdl
IGhhdmUKLSAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQu
Ci0gICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BQdXRQcml2YXRlTmFtZT4oKSk7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwotCi0gICAgU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwotICAgIGlm
ICghc3RydWN0dXJlSUQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKLQotICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKLSAgICBpZiAoIW5ld1N0cnVjdHVyZUlE
KSB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwot
ICAgIH0KLQotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAKLSAgICBBU1NFUlQoc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAKLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVj
dCgpKSkgewotICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
IHZtLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwotICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLVB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElD
U3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1
aWQpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChkaWRFeGl0KQotICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJ
bmZvOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURh
dGEpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChw
cm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIFVO
VVNFRF9QQVJBTShkaWRFeGl0KTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7
Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxp
bmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAotICAg
ICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1Yklu
Zm8pOwotICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhzdW1tYXJ5KTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5
cGUoKSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4K
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgIH0KLSAgICAgICAgCi0g
ICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxp
c3QgPSBzdHViSW5mby0+dS5zdHViOwotICAgICAgICAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBy
ZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAg
IGlmIChhY2Nlc3MudmlhUHJveHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3Mu
dXNlc1BvbHlQcm90bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCB2YXJpYW50OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFj
Y2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogewot
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgp
OwotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNl
dCgpOwotICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVW
YWxpZGl0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogewotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBs
ZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
YWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFi
bGU6IHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENh
bGxMaW5rU3RhdHVzPigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlu
a0luZm8oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRT
dGF0dXMuY29uZGl0aW9uU2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNh
bGxMaW5rU3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvclNldHRlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFy
aWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVz
dWx0LnNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotICAgIEV4
aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVj
b2RlSW5kZXgpOwotCi0gICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0
U3RhY2spIHsKLSAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmln
aW4pOwotICAgICAgICAKLSAgICAgICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlJZFN0
YXR1cyYgcmVzdWx0KSAtPiBQdXRCeUlkU3RhdHVzIHsKLSAgICAgICAgICAgIGlmICghY29udGV4
dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1
cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGJhc2Vs
aW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgIGJhc2Vs
aW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5l
UmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhp
dEZyb21JbmxpbmVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9u
KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgewotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBy
ZXN1bHQ7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBs
b2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCB1aWQs
IGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3Vs
dC5pc1NldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKLSAgICAgICAgICAg
IHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1
aWQsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3Qs
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKLXsKLSAgICBpZiAocGFy
c2VJbmRleCgqdWlkKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0KLSAgICBpZiAoc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoKTsKLSAgICAKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgUHV0QnlJ
ZFN0YXR1cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHNldFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1
Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCi0gICAgICAgICAgICAv
LyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1
Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAotICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRo
cm93IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVm
aW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yT3JWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlB
dHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+
cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
ICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhp
cyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KLSAgICAgICAgICAgICAgICAvLyBUaGF0IG1l
YW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRo
aW5nIGZpc2h5IGlzCi0gICAgICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5v
dCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAot
ICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRv
IHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3kuCi0gICAgICAgICAgICAgICAg
Ly8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9Ci0gICAgICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0
UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAotICAgICAgICAvLyBzaG91bGQgbmV2
ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQot
ICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZhdGUgZmll
bGQuIFdlIG5lZWQgdG8gdGFrZQotICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjcGV0
aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KLSAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xv
d1BhdGgpOwotCi0gICAgICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcg
YSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQotICAgICAg
ICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KLSAgICAKLSAgICAg
ICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJl
IGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZl
IHVwLCBzaW5jZQotICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0
aWVzIHRvIHN0cmluZ3MuCi0gICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2Jq
ZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
LSAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owot
ICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxk
UHV0S2luZC5pc05vbmUoKSk7Ci0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwotICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8vIFdlIG9ubHkg
b3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0
aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KLSAgICAg
ICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKCF0
cmFuc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIAotICAgICAg
ICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFu
c2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwotICAgICAgICBpZiAoIWRpZEFwcGVuZCkK
LSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0K
LSAgICAKLSAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
I2VuZGlmCi0KLWJvb2wgUHV0QnlJZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0g
ICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
aWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxscygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10
ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgZm9y
IChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKLSAgICAgICAgaWYgKCF2
YXJpYW50LmZpbmFsaXplKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWVyZ2UoY29uc3QgUHV0
QnlJZFN0YXR1cyYgb3RoZXIpCi17Ci0gICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZvcm1h
dGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZdICgp
IHsKLSAgICAgICAgKnRoaXMgPSBQdXRCeUlkU3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIu
bWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLSAgICB9OwotICAg
IAotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAg
ICAgKnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNp
bXBsZToKLSAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICAgICAg
cmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlk
VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWFw
cGVuZFZhcmlhbnQob3RoZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsK
LSAgICAgICAgfQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAg
ICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwotICAg
IGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJp
YW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChtX3Zhcmlh
bnRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci19Ci0KLXZv
aWQgUHV0QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3
aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgb3V0LnBy
aW50KCIoTm9JbmZvcm1hdGlvbikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBj
YXNlIFNpbXBsZToKLSAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyks
ICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRo
OgotICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODc4ZTI1MmRiNjlhYzU3MTNkYzhlOGY4YjY0NDAwMGNhZTYzMGIxZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiRXhp
dEZsYWcuaCIKLSNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgotI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgotI2luY2x1ZGUgIlN0dWJJ
bmZvU3VtbWFyeS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xh
c3MgVk07Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIFN0
cnVjdHVyZUNoYWluOwotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87Ci0KLXR5cGVkZWYgSGFzaE1h
cDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhh
c2g+IFN0dWJJbmZvTWFwOwotCi1jbGFzcyBQdXRCeUlkU3RhdHVzIGZpbmFsIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAg
Ly8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgICBOb0lu
Zm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBz
b21lIGtpbmQuCi0gICAgICAgIFNpbXBsZSwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRl
biB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgVGFrZXNTbG93UGF0aCwKLSAgICAgICAgLy8gSXQn
cyBrbm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4KLSAgICAgICAgTWFrZXNDYWxs
cwotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cygpCi0gICAgICAgIDogbV9zdGF0ZShO
b0luZm9ybWF0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0
YXR1cyhTdGF0ZSBzdGF0ZSkKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xv
d1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGlj
aXQgUHV0QnlJZFN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoc3VtbWFyeSkgewotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZv
cm1hdGlvbjoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgotICAgICAg
ICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2Ug
U3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgbV9zdGF0ZSA9IFRh
a2VzU2xvd1BhdGg7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKLSAgICAgICAgICAgIG1fc3RhdGUg
PSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRTdGF0
dXMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi0gICAgICAgIDogbV9zdGF0ZShTaW1w
bGUpCi0gICAgewotICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0
YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFn
LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7Ci0g
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2sm
IGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0KLSNp
ZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5m
byhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0j
ZW5kaWYKLSAgICAKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
LSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9y
bWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09
IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZSA9PSBTaW1wbGU7IH0KLSAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0g
ICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgUHV0QnlJZFN0YXR1cyBzbG93VmVyc2lv
bigpIGNvbnN0OwotICAgIAotICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFudHMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAx
PiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9Ci0gICAgY29uc3QgUHV0
QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tp
bmRleF07IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKLSAgICAKLSAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKLSAg
ICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0jaWYgRU5BQkxFKEpJ
VCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAg
IGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSk7Ci0jZW5kaWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxM
SW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwot
ICAgIAotICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAKLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3Rv
cjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTRkNjQ3ODJhOTY0MzkzMDlhZTlh
MWZhMDQ4YTM4NzI1NTIxZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2lu
Y2x1ZGUgIkhlYXBJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkVmFyaWFu
dDo6UHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIDogUHV0
QnlJZFZhcmlhbnQoKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikK
LXsKLSAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhl
ci5tX29sZFN0cnVjdHVyZTsKLSAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0
dXJlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7Ci0gICAgbV9v
ZmZzZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykK
LSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2FsbExpbmtTdGF0
dXMgPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0
QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0g
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAg
ICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUg
PSBvbGRTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJl
OwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1cykKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdU
Rk1vdmUoY2FsbExpbmtTdGF0dXMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cnVjdHVy
ZSogUHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAotewot
ICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgIH0KLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0
dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgbV9raW5kID0gUmVwbGFjZTsKLSAg
ICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50
Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAg
IGNhc2UgVHJhbnNpdGlvbjoKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQ
dXRCeUlkVmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtp
bmQoKSA9PSBTZXR0ZXI7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdl
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBpZiAobV9vZmZzZXQgIT0gb3Ro
ZXIubV9vZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9raW5k
KSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOiB7
Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZTog
ewotICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IG5ld1Zh
cmlhbnQgPSBvdGhlcjsKLSAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdl
VHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgewotICAgICAgICAgICAgICAgICp0aGlzID0g
bmV3VmFyaWFudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOgotICAgICAgICAgICAgcmV0dXJuIGF0dGVt
cHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAh
PSBvdGhlci5tX29sZFN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25l
d1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNl
dDsKLSAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChv
dGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNl
dDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICBjYXNlIFNldHRlcjogewotICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNl
dHRlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICht
X2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKLSAgICAgICAgICAg
IGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFt
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNl
dCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAg
ICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25k
aXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25k
aXRpb25TZXQ7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKLSAgICAg
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0
dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0gICAgCi0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUHV0QnlJ
ZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiByZXBsYWNlKQotewotICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7
Ci0gICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJlcGxhY2UpOwotICAgIEFTU0VSVChtX29m
ZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKLSAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3Ry
dWN0dXJlcygpKTsKLSAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOwot
ICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAg
Ly8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGgg
YWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCi0gICAgLy8gdHJhbnNpdGlvbnMg
dG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0
dXJlIFMuIFRoaXMgZG9lc24ndAotICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRl
IGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCi0gICAgCi0g
ICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3
U3RydWN0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbV9vbGRTdHJ1Y3R1
cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
ZmluYWxpemUoVk0mIHZtKQotewotICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZl
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAh
dm0uaGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2bSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+
ZmluYWxpemUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAg
ICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
Y2FzZSBSZXBsYWNlOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNl
dCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVHJh
bnNpdGlvbjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAi
LCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCi0gICAgICAgICAg
ICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAot
ICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIGNhc2UgU2V0dGVyOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFNldHRl
cjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAg
ICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBvdXQu
cHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwotICAgICAgICBvdXQucHJpbnQoIiwgY2Fs
bCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgb3V0LnByaW50KCI+Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE3NWE3M2EyZjhkNGI1ZTVmMGExZGU0MDhhNWZiYmQxY2I3YWIyNTkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNs
dWRlICJQcm9wZXJ0eU9mZnNldC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtTdGF0dXM7Ci0KLWNsYXNzIFB1dEJ5SWRWYXJp
YW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIEtp
bmQgewotICAgICAgICBOb3RTZXQsCi0gICAgICAgIFJlcGxhY2UsCi0gICAgICAgIFRyYW5zaXRp
b24sCi0gICAgICAgIFNldHRlcgotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoKQot
ICAgICAgICA6IG1fa2luZChOb3RTZXQpCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNl
dCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICBQdXRCeUlk
VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0KLSAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCi0gICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiwKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7
Ci0gICAgCi0gICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0g
ICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4g
bV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNp
dGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAg
cmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0g
VHJhbnNpdGlvbik7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLQotICAgIGJv
b2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdl
KCkgY29uc3Q7Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5z
aWNzIGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVk
IHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBj
b25zdCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQotCi0gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9y
IHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAg
ICB9Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
Y2FsbExpbmtTdGF0dXMuZ2V0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUo
Vk0mKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi0gICAg
Ym9vbCBvdmVybGFwcyhjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKTsKLSAgICAKLSAgICBLaW5kIG1f
a2luZDsKLSAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICBTdHJ1Y3R1cmVTZXQgbV9v
bGRTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsK
LSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeVN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlT
dGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2YmNjYTY3Y2YxODZjNDZiZGEwMzMwNmJhMDQzYzA0MGZh
N2NhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlTdGF0dXMuY3BwCkBAIC0wLDAgKzEsNTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlB1dEJ5U3RhdHVzLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIK
KyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworYm9vbCBQdXRCeVN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZElD
U3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKK30KKwordm9pZCBQdXRCeVN0YXR1
czo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKK30KKwor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVk0mIHZtID0g
cHJvZmlsZWRCbG9jay0+dm0oKTsKKyAgICAKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmls
ZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisKKyAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9wdXRfYnlf
aWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAvLyBXZSBkbyBu
byBoYXZlIGEgY29kZSByZXRyaWV2aW5nIExMSW50IGluZm9ybWF0aW9uIGZvciBgb3BfcHV0X3By
aXZhdGVfbmFtZWAuCisgICAgICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhp
cyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQorICAgICAgICAv
LyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQuCisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICB9CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSAmKHByb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBpZGVudGlmaWVyLT5pbXBsKCk7CisKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1l
dGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CisgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKKyAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsK
KworICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1
cmVJRDsKKyAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVw
bGFjZShudWxscHRyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgfQorCisgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0
dXJlSUQpOworICAgIAorICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Cisg
ICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgeworICAgICAgICBjb25kaXRp
b25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgfQorICAgIAorICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24obnVsbHB0
ciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKK30KKwor
I2lmIEVOQUJMRShKSVQpCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklU
KQorICAgIGlmIChkaWRFeGl0KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChD
b2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1
bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
c3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURf
UEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQoreworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAg
ICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHVi
SW5mbyk7CisgICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhzdW1tYXJ5KTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5
cGUoKSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4K
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
CisgICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAg
ICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVy
KSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAg
ICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAg
ICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZp
ZXIoKSwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFw
cGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQg
PSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZp
ZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRl
cjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0
dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0
dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OklubGluZWFibGU6IHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBt
YWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZT4oKS5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5r
U3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNp
dGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNj
ZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBj
b21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAs
IElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKK3sKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKTsKKyAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0
ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2Nr
LCBieXRlY29kZUluZGV4KTsKKyAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0
U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNTdGF0dXND
b250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVzIHN0YXR1
cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gYmxl
c3MgPSBbJl0gKGNvbnN0IFB1dEJ5U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVzIHsKKyAg
ICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7CisgICAgICAg
ICAgICAgICAgUHV0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAorICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwg
ZGlkRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAg
ICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlk
RXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQuc2xvd1ZlcnNpb24oKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAgICAgICBQ
dXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAg
ICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCisgICAg
ICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJ
bmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgaXNE
aXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sKKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAocGFyc2VJ
bmRleCgqdWlkKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
CisgICAgaWYgKHNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cygpOwor
ICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBQdXRCeVN0YXR1cyBy
ZXN1bHQ7CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHNldFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0
cmlidXRlcyk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1
dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1l
YW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBu
ZWVkIHRvIHRha2UgCisgICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9u
LgorICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JW
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisK
KyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
ciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBX
YXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJl
cGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlz
IGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNo
cG9pbnQgc2V0LgorICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMg
cHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAg
ICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRo
ZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8g
SklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRv
IGhhdmUgYSBsYXp5IHRoaW5neS4KKyAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZl
IHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
UHV0QnlWYXJpYW50IHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwg
c3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdl
IGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQg
aXQKKyAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
YmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEg
bm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8g
c2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVz
aXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0
IHRoaXMgaXMgcmVhbGx5CisgICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5p
dHkgY2hlY2tzLgorICAgIAorICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMg
b24gZGljdGlvbmFyaWVzLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAg
ICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0
IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50
IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3RydWN0
dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOworICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAorICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsK
KyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJl
IHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgorICAgICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQp
OworICAgICAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OworICAgIAorICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KFB1
dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24s
IGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgIGlmICghZGlkQXBwZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAg
ICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisK
K2Jvb2wgUHV0QnlTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIGlmIChtX3N0YXRl
ID09IE1ha2VzQ2FsbHMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChtX3N0
YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3Zhcmlh
bnRzW2ldLm1ha2VzQ2FsbHMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93
VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/
IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQ
dXRCeVN0YXR1czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmds
ZUlkZW50aWZpZXJGb3JJQ1N0YXR1cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5F
X1ZJU0lUX0FHR1JFR0FURShQdXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFy
aWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1
czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRC
eVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6
ZmluYWxpemUoVk0mIHZtKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykgeworICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRC
eVN0YXR1czo6bWVyZ2UoY29uc3QgUHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhl
ci5tX3N0YXRlID09IE5vSW5mb3JtYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBh
dXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7CisgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1h
a2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOworICAgIH07CisgICAgCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBO
b0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICBjYXNl
IE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNp
bXBsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJp
YW50cywgc2V0KTsKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAg
ICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbikiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAo
bV92YXJpYW50cyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBU
YWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIihN
YWtlc0NhbGxzKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMmEx
YzczYzhmNDFjYTE5MmU1OGQ0YmUxZGUxNjYxM2Q5MDAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJF
eGl0RmxhZy5oIgorI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZp
ZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJ
bmZvU3VtbWFyeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgVk07CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0
cnVjdHVyZUNoYWluOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1h
cDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhh
c2g+IFN0dWJJbmZvTWFwOworCitjbGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZv
cm1hdGlvbiwKKyAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgorICAgICAgICBTaW1wbGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCisgICAgICAgIFRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMK
KyAgICB9OworICAgIAorICAgIFB1dEJ5U3RhdHVzKCkKKyAgICAgICAgOiBtX3N0YXRlKE5vSW5m
b3JtYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhT
dGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgg
fHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0
QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHN1bW1hcnkpIHsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246
CisgICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZv
U3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQ
YXRoOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgICAgICBtX3N0YXRlID0gTWFrZXND
YWxsczsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAgewor
ICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAg
c3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmll
bGRQdXRLaW5kKTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXND
b250ZXh0U3RhY2smLCBDb2RlT3JpZ2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGlj
IFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdp
bik7CisjZW5kaWYKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxz
OyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1Zl
cnNpb24oKSBjb25zdDsKKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQ
dXRCeVZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tp
bmRleF07IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNp
bmdsZUlkZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25z
dCBQdXRCeVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9y
U3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXgpOworICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsK
KyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBW
ZWN0b3I8UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIwN2M1MzViMzc0MDQ4MTA5ZTY5YzkwYWQ4YzlhOWZmMjk0ODdjMjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRC
eVZhcmlhbnQuaCIKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworUHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlW
YXJpYW50JiBvdGhlcikKKyAgICA6IFB1dEJ5VmFyaWFudChvdGhlci5tX2lkZW50aWZpZXIpCit7
CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlWYXJpYW50JiBQdXRCeVZhcmlhbnQ6Om9w
ZXJhdG9yPShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIG1fa2luZCA9IG90aGVy
Lm1fa2luZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOworICAg
IG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CisgICAgbV9jb25kaXRpb25T
ZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0
OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3Rh
dHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMp
OworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgbV9p
ZGVudGlmaWVyID0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIHJldHVybiAqdGhpczsKK30KKwor
UHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsK
KyAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeVZh
cmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBU
cmFuc2l0aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAg
ICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpzZXR0
ZXIoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzKQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlm
aWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9jYWxsTGlu
a1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1N0cnVjdHVyZSogUHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5z
aWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3RydWN0dXJl
ICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNz
YXJ5KCkKK3sKKyAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBtX2tpbmQgPSBSZXBs
YWNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Cit9CisKK2Jvb2wgUHV0QnlW
YXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHJldHVybiBvbGRT
dHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgUHV0QnlWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
a2luZCgpID09IFNldHRlcjsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdl
KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9
ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
bV9pZGVudGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNh
c2UgTm90U2V0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBz
d2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJU
KG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBU
cmFuc2l0aW9uOiB7CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVy
OworICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2UoKnRoaXMpKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50Owor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFu
c2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJh
bnNpdGlvbjogeworICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xk
U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtZXJn
ZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0
aW9uU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgIGNh
c2UgU2V0dGVyOiB7CisgICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0
dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgeworICAgICAgICAgICAgaWYgKCEobV9jYWxs
TGlua1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRp
b25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAo
IW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNP
bmVTbG90QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICAgICAgbV9jYWxs
TGlua1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICAKKyAg
ICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVt
cHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFj
ZSkKK3sKKyAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOworICAgIEFTU0VSVChyZXBs
YWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5t
X29mZnNldCk7CisgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7CisgICAg
QVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAgICBBU1NFUlQocmVwbGFj
ZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoaXMgc29ydCBvZiBt
ZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFk
ZCBhIG5ldyBmaWVsZCB3aGljaAorICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdo
aWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNu
J3QKKyAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0
aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgorICAgIAorICAgIGlmIChyZWFsbG9jYXRl
c1N0b3JhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXBsYWNl
Lm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3Ry
dWN0dXJlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RF
RklORV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmICht
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCit7
CisgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1f
bmV3U3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRp
b25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVZhcmlh
bnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiPCIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciwgIicsICIpOworICAg
IHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgi
ZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOgor
ICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiUmVwbGFjZTogIiwgaW5Db250ZXh0KHN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAg
ICBvdXQucHJpbnQoCisgICAgICAgICAgICAiVHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNv
bnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
IiwgIiwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldHRlcjoK
KyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlNldHRlcjogIiwgaW5Db250ZXh0KHN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25k
aXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0g
IiwgbV9vZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5r
U3RhdHVzKTsKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MTQwMmI0MjU2YWRlN2UwNTY1MGE5ZmYwZjY4NDVlYzFiMzFlYjRh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
VmFyaWFudC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlu
a1N0YXR1czsKKworY2xhc3MgUHV0QnlWYXJpYW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBOb3RTZXQsCisgICAgICAg
IFJlcGxhY2UsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNldHRlcgorICAgIH07Cisg
ICAgCisgICAgUHV0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKKyAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
CisgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX2lkZW50aWZp
ZXIoV1RGTW92ZShpZGVudGlmaWVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1dEJ5VmFy
aWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yPShj
b25zdCBQdXRCeVZhcmlhbnQmKTsKKworICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgcmVwbGFjZShD
YWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7
CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCB0cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50
aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCBzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRp
ZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7Cisg
ICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KKyAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9v
bGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
biB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0
dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJl
KCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFj
ZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCisgICAgeworICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJh
bnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wg
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkg
Y29uc3Q7CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNz
IGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRo
aXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25z
dCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQorCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRl
bXBsYXRlZCBoZWxwZXJzLgorICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9
CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fY2Fs
bExpbmtTdGF0dXMuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25z
dCBQdXRCeVZhcmlhbnQmIG90aGVyKTsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FU
RTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0
b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25z
dCBQdXRCeVZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV9pZGVudGlmaWVy
ICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChtX2lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIgIT0g
b3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0
dXJlU2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGF0dGVtcHRUb01lcmdlVHJh
bnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSk7CisgICAgCisg
ICAgS2luZCBtX2tpbmQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgU3RydWN0
dXJlU2V0IG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBu
dWxscHRyIH07CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwor
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3Jk
ZWRTdGF0dXNlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5jcHAKaW5kZXggMGM0YzA3NDdhMGFiODVmYjNhZjgxN2QyOTQ1ZDYyMWFkYzNlYmFk
Ny4uZmNlMGY0ZDhlZTEwZWRkYmNmM2M3NTRlZjgzM2EzNWJlOTdkYmMxOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcApAQCAt
NjIsMTAgKzYyLDEwIEBAIEdldEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRHZXRCeVN0
YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KICAgICAKLVB1dEJ5SWRTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5SWRT
dGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlJZFN0YXR1cyYg
c3RhdHVzKQorUHV0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5U3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5U3RhdHVzJiBzdGF0dXMpCiB7
Ci0gICAgYXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5SWRTdGF0dXM+KHN0YXR1cyk7
Ci0gICAgUHV0QnlJZFN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOworICAgIGF1dG8g
c3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeVN0YXR1cz4oc3RhdHVzKTsKKyAgICBQdXRCeVN0
YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOwogICAgIHB1dHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGNvZGVPcmlnaW4sIFdURk1vdmUoc3RhdHVzUHRyKSkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFn
Z3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBn
ZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAg
Zm9yIChhdXRvJiBwYWlyIDogcHV0cykKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykKICAgICAgICAgcGFpci5z
ZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRl
bGV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3Jk
ZWRTdGF0dXNlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuaAppbmRleCBiZDE1NzA1NDU3MzgwYzM3N2I4NDI4NmQ1M2FhODY4YTMyNjMyNGI1Li45
NDk4M2RiYzc2N2QwN2UyODA0YmQ0NDJjMzdlYjU0Y2Y0NTdiYThkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKQEAgLTMwLDcgKzMw
LDcgQEAKICNpbmNsdWRlICJEZWxldGVCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVz
LmgiCiAjaW5jbHVkZSAiSW5CeVN0YXR1cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIK
KyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IFJlY29yZGVk
U3RhdHVzZXMgewogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBhZGRDYWxsTGlua1N0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2FsbExpbmtTdGF0dXMmKTsKICAgICBHZXRCeVN0YXR1
cyogYWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEdldEJ5U3RhdHVzJik7
Ci0gICAgUHV0QnlJZFN0YXR1cyogYWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwg
Y29uc3QgUHV0QnlJZFN0YXR1cyYpOworICAgIFB1dEJ5U3RhdHVzKiBhZGRQdXRCeVN0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlTdGF0dXMmKTsKICAgICBJbkJ5U3RhdHVzKiBh
ZGRJbkJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5U3RhdHVzJik7CiAgICAg
RGVsZXRlQnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBEZWxldGVCeVN0YXR1cyYpOwogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMmKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMg
ewogICAgIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPj4+IGNhbGxzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdp
biwgc3RkOjp1bmlxdWVfcHRyPEdldEJ5U3RhdHVzPj4+IGdldHM7Ci0gICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlJZFN0YXR1cz4+PiBwdXRzOwor
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5U3Rh
dHVzPj4+IHB1dHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1
ZV9wdHI8SW5CeVN0YXR1cz4+PiBpbnM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8RGVsZXRlQnlTdGF0dXM+Pj4gZGVsZXRlczsKICAgICBWZWN0b3I8
c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cz4+PiBjaGVja1ByaXZhdGVCcmFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA3NTkxOGY2NzczMTgzY2Rm
Y2ViMjNkYzNjYzIxZDMyN2U5ZmExODY4Li5mMjdiNzM3NGVmOWFlZTEwN2E3MDE2ZGE4ODFiY2Vk
Zjc4MTlkNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTI4MSw4ICsyODEsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2Rl
QmxvY2sqIGMKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAgICBy
ZXNldEdldEJ5KGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKLSAgICAgICAgcmVzZXRQdXRC
eUlEKGNvZGVCbG9jaywgKnRoaXMpOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAg
ICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICByZXNl
dFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKICAgICAgICAgcmVzZXRJbkJ5KGNvZGVC
bG9jaywgKnRoaXMsIEluQnlLaW5kOjpCeUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggNzMwNGZiMTU0ZTg0MGQ4NWRh
MjhlNmUyNTAxYWFiMThlNTVkNDFhNC4uZTIyNTQwYzA5YmM3ODNlN2Q4ZTA2ZDUzYjdjYTgwODcx
ZWU2NzIyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKQEAgLTU0LDcgKzU0LDggQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDog
aW50OF90IHsKICAgICBHZXRCeUlkRGlyZWN0LAogICAgIFRyeUdldEJ5SWQsCiAgICAgR2V0QnlW
YWwsCi0gICAgUHV0LAorICAgIFB1dEJ5SWQsCisgICAgUHV0QnlWYWwsCiAgICAgSW5CeUlkLAog
ICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXgg
ZDFjMGI0NmE2YTkwNzM5MDM1OWRkMzBjMGNlNjhjMTFjMTdiMjgyMS4uMDdjMmQxZjM1ZGIyZjU5
NDYxYTQ5NzQ5NWEzZmEyYzc0NDZjNzdhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtNDcsNyAr
NDcsNyBAQAogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTWF0
aENvbW1vbi5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAi
U3RyaW5nT2JqZWN0LmgiCkBAIC0zOTczLDcgKzM5NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlU2V0IHRoaXNTZXQgPSAqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSk7CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAg
IGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKQEAgLTM5ODIsNyArMzk4Miw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdp
bmFsVmFsdWU7CiAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXNTZXQub25seVN0cnVjdHVy
ZSgpICE9IG5ld1N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5h
cHBlbmQoCkBAIC0zOTkwLDcgKzM5OTAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
ICAgICAgICAgICAgIH0gLy8gZWxzZSB0aGlzIGlzIHJlYWxseSBhIHJlcGxhY2UuCiAgICAgICAg
ICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSh0aGlzU2V0
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDE0MCwxMCArNDE0MCwxMCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlQWNjZXNzSW5saW5p
bmcoKSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBib29s
IGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0IHx8IG5vZGUtPm9wKCkgPT0g
UHV0UHJpdmF0ZU5hbWVCeUlkOwogICAgICAgICAgICAgYXV0byBwcml2YXRlRmllbGRQdXRLaW5k
ID0gbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQgPyBub2RlLT5wcml2YXRlRmllbGRQ
dXRLaW5kKCkgOiBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCk7Ci0gICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAg
ICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAog
ICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAg
ICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAorICAgICAgICAg
ICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgICAgICBpc0Rp
cmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9
IHRydWU7CkBAIC00MTUxLDcgKzQxNTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAg
ICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52
YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZh
cmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlv
blNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hDb25k
aXRpb24oY29uZGl0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2Qg
PSBmYWxzZTsKQEAgLTQxNjIsMTQgKzQxNjIsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3Ry
dWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVy
ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0NzMsNyArNDQ3Myw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC00NjUyLDEwICs0NjUyLDEwIEBAIHZv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcklDU3RhdHVz
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOiB7CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czogewogICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKLSAgICAgICAgICAgIG5vZGUt
PnB1dEJ5SWRTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0
KCkpOworICAgICAgICAgICAgbm9kZS0+cHV0QnlTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3Ry
dWN0dXJlLnRvU3RydWN0dXJlU2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCmluZGV4IGMyMTZhMzk2ZDcxNjA0MjBkZmI0ODE1ZjEyN2U3ODU5ZDVhOTE3
M2IuLjZlMjc1MzEwNGJkMzgxNTljY2IxYjFkMzkzNzE1Mzg2YjY0ODZiNTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcApAQCAtNDAyLDcgKzQwMiw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoK
LSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNh
bGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpAQCAtMTI2NSw3ICsxMjY1
LDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggNjNlNjhkMDM3ZmUxMTEwMWFl
NDEyYTI3ODIyNTNmNTk0M2JkNjI3Yi4uN2Y0MDJlNjk3ZjlkYTA3YTRjNTVhZGE1MTJjNDc5ZGM0
ZjIyMzc2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5o
IgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtNzQsNyArNzMsNyBAQAogI2luY2x1ZGUg
IlByZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIK
ICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVu
dC5oIgpAQCAtMjM5LDExICsyMzgsMTEgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIGJv
b2wgY2hlY2tQcmVzZW5jZShKU09iamVjdCoga25vd25CYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCos
IFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICB2b2lkIGNoZWNrUHJl
c2VuY2VGb3JSZXBsYWNlKE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlP
ZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIC8vIFdvcmtzIHdpdGggYm90
aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAg
ICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2Yg
UHV0QnlWYXJpYW50LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgogICAgIE5v
ZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJik7CiAKLSAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYsIE5vZGUqIHZhbHVl
KTsKKyAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25z
dCBQdXRCeVZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICB2b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMjUzLDEz
ICsyNTIsMTMgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIHZvaWQgaGFuZGxlR2V0UHJp
dmF0ZU5hbWVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzKTsKICAgICB2b2lkIGVtaXRQdXRC
eUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1
ZSwgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CisgICAg
ICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3Qg
UHV0QnlTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CiAgICAgdm9pZCBoYW5kbGVQ
dXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCisg
ICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsCiAgICAgICAgIGJvb2wg
aXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSk7CiAKICAgICB2
b2lkIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKKyAgICAgICAgTm9kZSog
YmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9k
ZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAg
ICB2b2lkIGhhbmRsZURlbGV0ZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5h
dGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgRGVsZXRlQnlTdGF0dXMsIEVDTUFNb2RlKTsKQEAgLTQ1MTQsNyArNDUxMyw3IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgICAgIC8vIHRoZSBiYXNl
IG5vdCB0byBoYXZlIHRoZSBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGlmIGFsbCBvZgogICAgICAgICAgICAgICAgIC8vIHRoZSBzdHJ1Y3R1cmVzIGlu
IHRoZSB2YXJpYW50LnN0cnVjdHVyZVNldCgpIGFncmVlIG9uIHRoZSBwcm90b3R5cGUgKGl0IHdv
dWxkIGJlCiAgICAgICAgICAgICAgICAgLy8gaGlsYXJpb3VzbHkgcmFyZSBpZiB0aGV5IGRpZG4n
dCkuIE5vdGUgdGhhdCB3ZSBhcmUgcmVseWluZyBvbiBzdHJ1Y3R1cmVTZXQoKSBoYXZpbmcKLSAg
ICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBi
ZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlJZFN0YXR1cyB3b3Jr
LgorICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3
YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeVN0YXR1cyB3
b3JrLgogCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJpZ2h0IG5vdywgaWYgd2UgaGF2ZSBh
biBPUENTLCB3ZSBoYXZlIG1vbm8gcHJvdG8uIEhvd2V2ZXIsIHRoaXMgd2lsbAogICAgICAgICAg
ICAgICAgIC8vIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIG9uY2Ugd2UgaGF2ZSBh
IGh5YnJpZCBkYXRhIHN0cnVjdHVyZSBmb3IKQEAgLTQ1OTMsOSArNDU5Miw5IEBAIE5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKIH0KIAotTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hl
Y2tQcmVzZW5jZUZvclJlcGxhY2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKICAgICByZXR1cm4g
aGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFs
dWUpOwpAQCAtNDk5OCwzOSArNDk5NywzOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bkJ5SWQoVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZQogfQog
CiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKLSAgICBOb2RlKiBiYXNlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3Rh
dHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVl
LCBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2Rl
IGVjbWFNb2RlKQogewogICAgIGlmIChpc0RpcmVjdCkKICAgICAgICAgYWRkVG9HcmFwaChQdXRC
eUlkRGlyZWN0LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZh
bHVlKTsKICAgICBlbHNlCi0gICAgICAgIGFkZFRvR3JhcGgocHV0QnlJZFN0YXR1cy5tYWtlc0Nh
bGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5m
byhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChwdXRCeVN0YXR1
cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAg
IGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVj
b2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBjb25zdCBQdXRC
eVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhp
dEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNT
aW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VB
Y2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQor
ICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFu
dHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1
dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7
Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRT
dGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAx
KSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5t
YWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vz
c0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+
IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZh
cmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUo
KSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsg
dmFyaWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFy
aWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCk7IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmIChwdXRCeVN0YXR1c1t2
YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5U3Rh
dHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUwMzksMjggKzUwMzgsMjggQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29t
cGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRQdXRCeUlkKCk7CiAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAg
YWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0
YXR1cykpLCBiYXNlKTsKIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAg
ICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5
T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsK
LSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAg
ICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0
YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3Jh
cGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRT
dGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Cisg
ICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAg
ICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2U6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVu
dENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFy
aWFudDo6UmVwbGFjZTogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIHN0b3Jl
KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MDY4LDEyICs1MDY3LDEyIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewotICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7
CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJl
KCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkp
IHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRC
eUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTUxMzUsMTIgKzUxMzQsMTIg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlNldHRlcjog
eworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0g
bG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKICAg
ICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7Cisg
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC01MTg0LDI2ICs1MTgzLDI2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgfQogICAgIAogICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBl
Y21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBw
dXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0g
fQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAg
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBw
dXRCeUlkU3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCisg
ICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkg
fHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5s
aW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAo
IXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwg
IU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1
cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAg
ICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcElu
Zm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewot
ICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtl
c0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAg
ICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMo
KQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmco
KQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6
bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIHx8
IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vz
c0lubGluaW5nTGlzdFNpemUoKSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRl
TmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQp
LCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUyMTEs
MjkgKzUyMTAsMjkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVC
eUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKICAg
ICAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFw
aC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsK
ICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5
SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYg
dmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRh
dGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52
YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZp
ZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0
QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7
Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOwor
ICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1
dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAo
dmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Cisg
ICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVG
aWVsZFB1dEtpbmQuaXNTZXQoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlk
U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5y
ZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0
QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29t
cGlsYXRpb24oKSkpCkBAIC01MjQxLDkgKzUyNDAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlz
RGVmaW5lKCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSks
IGJhc2UpOwogICAgIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsK
ICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewpAQCAtNjQ1NCw0
MCArNjQ1MywzMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAg
ICAgICAgICAgICBib29sIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gZmFsc2U7CiAKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2Rl
T3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGls
ZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAg
ICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLiBGb3IgYHB1
dF9wcml2YXRlX25hbWVgLCB3ZSBtaWdodCBoYXZlIHNvbWUgaW5mbyBmcm9tCi0gICAgICAgICAg
ICAgICAgLy8gTExJbnQgSUMsIGluY2x1ZGluZyBjYWNoZWQgY2VsbCB0aGF0IHdlIGNvdWxkIHVz
ZSBpZiBCeVZhbCBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY3NzkKLSAgICAgICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZv
Ci0gICAgICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aAotICAgICAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJZDsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygp
LmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsK
LSAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQp
CisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZENvbnN0YW50VmFsdWUpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAg
ICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFw
LCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKKworICAgICAgICAgICAg
ICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRl
bnRpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZp
ZXIuY2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3lt
Ym9sQ2VsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
c0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
ZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1
aWQpLCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlk
KTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGJ5dGVjb2RlLm1fcHV0
S2luZCk7CisgICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0
cnlDb21waWxlQXNQdXRCeU9mZnNldCkKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2YXRl
TmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5
SWRTdGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2luZCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICBpZiAoIXRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQogICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0UHJpdmF0ZU5hbWUsIE9wSW5mbygpLCBPcEluZm8oYnl0ZWNvZGUubV9wdXRLaW5k
KSwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cHV0X3ByaXZhdGVfbmFtZSk7CkBAIC02NTY3LDEyICs2NTU2LDEyIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwog
ICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAK
LSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBwdXRCeVN0YXR1cyA9IFB1dEJ5
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2Vs
aW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLAotICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CisgICAgICAg
ICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywg
dWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGRpcmVjdCwgbmV4
dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CisgICAgICAgICAg
ICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ss
IHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgZGlyZWN0LCBuZXh0
T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIApAQCAtNzk3OSwxMyArNzk2
OCwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaEdsb2JhbFByb3BlcnR5KGdsb2JhbE9i
amVjdCwgaWRlbnRpZmllck51bWJlcikpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Rm9yY2VPU1JFeGl0KTsKIAotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzOwor
ICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1czsKICAgICAgICAgICAgICAgICBpZiAo
dWlkKQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlLCBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgdWlkKSwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRC
eUlkU3RhdHVzKFB1dEJ5SWRTdGF0dXM6OlRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAg
ICAgICBzdGF0dXMgPSBQdXRCeVN0YXR1cyhQdXRCeVN0YXR1czo6VGFrZXNTbG93UGF0aCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKLSAgICAgICAgICAg
ICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQor
ICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6
UmVwbGFjZQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0dXJlKCkuc2l6
ZSgpICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcElu
Zm8oQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSksIE9wSW5mbyhieXRl
Y29kZS5tX2dldFB1dEluZm8uZWNtYU1vZGUoKSksIGdldChieXRlY29kZS5tX3Njb3BlKSwgZ2V0
KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04ODE5
LDQ1ICs4ODA4LDI3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVj
b2RlIGJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRlCiAgICAgTm9kZSogdmFsdWUg
PSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpv
cGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBib29sIGNvbXBpbGVkQXNQdXRC
eUlkID0gZmFsc2U7Ci0gICAgewotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZp
ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1
czsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENv
ZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87
Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVk
IGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAg
ICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLgotICAgICAgICAgICAg
aWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0g
ICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAg
IGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0g
YnlWYWxJbmZvLT5jYWNoZWRJZDsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0g
bV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAg
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lk
ZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBu
dWxscHRyOwotICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKQotICAgICAg
ICAgICAgICAgICAgICBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNl
bGwoKSk7CisgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisg
ICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgeworCisgICAgICAgIFB1dEJ5U3RhdHVz
IHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRT
dGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKKyAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1
cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50
aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENl
bGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9w
SW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVp
ZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdXRC
eUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAg
ICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAg
ICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4o
KSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVy
LCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2VjbWFN
b2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKICAgICAgICAgfQot
Ci0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5
SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOwogICAgIH0K
IAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOTE2NDcwZDE3ZDUzYWYzNTZiZDUxNDRjOTRlNjA3ZGEw
Nzk1OGI0YS4uNmYyMDRkMmM1ZGUwYTYxMmY3MzFjOTU3YjQ2MWRjZjMwYzRhMTFhMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTU2OSw3ICs1NjksNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRB
cmd1bWVudHM6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhp
dFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuY3BwCmluZGV4IDg2YTNkMDc2NjRkN2ZhOTI3NTEyOTk3NzlmNDZmMTk3MmIwYWQwZjMuLjRj
ZTlmZjBlYjVkYTUxMGVjMjM0MDY0NjJhNzFlODgwOTUwOTYyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCkBAIC04MSw3ICs4
MSw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggZWFlYWY4NWVhMjU0
MTcyNTc1NWY0OGNlZmRlZGUwM2I4MWM5ZmEyYS4uYjg4MjVhY2FlMzRlNTVmODkyNjU5MTI5ODQx
ZDkzMjRhNDBjMTYxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKQEAgLTUwMSw3ICs1MDEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgCiAKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07
CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFu
dHNbaV07CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCkuZ2VuZXJp
Y0ZpbHRlcihbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuY29udGFpbnMobV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC01MTMsMTEg
KzUxMyw5IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0g
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlW
YXJpYW50OjpyZXBsYWNlKHZhcmlhbnQuaWRlbnRpZmllcigpLCB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIx
Myw3ICsxMjExLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3Jh
Z2UsIGNoaWxkRWRnZSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFs
dWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyKQorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9k
ZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeVZhcmlh
bnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewogICAgICAgICBO
b2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBjaGlsZEVkZ2Ug
PSBub2RlLT5jaGlsZDEoKTsKQEAgLTEyMjQsNyArMTIyMiw3IEBAIGNsYXNzIENvbnN0YW50Rm9s
ZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQo
S25vd25DZWxsVXNlKTsKIAogICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gbnVsbHB0
cjsKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5z
aXRpb24pIHsKICAgICAgICAgICAgIHRyYW5zaXRpb24gPSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMu
YWRkKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgfQpAQCAtMTI2OSw3ICsxMjY3LDcgQEAg
Y2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QdXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7
CiAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OwogCi0gICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAg
ICAgICBpZiAoZGlkQWxsb2NhdGVTdG9yYWdlKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwg
U3BlY05vbmUsIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHksCkBAIC0xNDA2LDEwICsxNDA0
LDEwIEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgaWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yKAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iob3JpZ2luLnNlbWFu
dGljKSwKICAgICAgICAgICAgIGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgp
LAotICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAorICAgICAg
ICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAgaXNEaXJlY3Qs
IHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkp
CkBAIC0xNDI0LDggKzE0MjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAg
ICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7Ci0gICAgICAgIGZvciAoY29uc3QgUHV0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewotICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAg
ICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkp
IHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5z
aXRpb24pIHsKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDgsNyArMTQ0Niw3IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0
cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkgfHwgcHJpdmF0
ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAg
ICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpKTsKQEAgLTE0NjQsOCArMTQ2Miw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBE
b24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRo
aXMuCiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5SWRTdGF0dXMsIG5vZGUtPm9yaWdpbiwK
LSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAorICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlTdGF0dXMsIG5vZGUtPm9yaWdp
biwKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCku
YWRkUHV0QnlTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKICAgICAgICAg
ICAgIEVkZ2UoYmFzZU5vZGUpKTsKIAogICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDYwZmJiMTVjNTkxNmI4OWRiNGM2ZDU1MTUwYzY2NTNj
MzdlMThmMWUuLmU2NDgxNjdjMTE4NmJjOGM5M2YzMmU4YzU0YmU3NTE4MzBlZjExMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBi
b29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVj
dHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0
QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFhNDk2
NGU5YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3Mzg1MDkuLmRlNGYyM2ZiYWEwYzk2ZGJjOGFh
YzUyNDkxNTNmOTg2ZTM5OGEyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcApAQCAtMjg2NSw3ICsyODY1LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3
NDZjOWRjNDM5NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhm
MGE5NTA4NzYzOGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
QEAgLTM4NSw4ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5C
eVN0YXR1cygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkp
OwotICAgIGlmIChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChj
b21tYSwgKm5vZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3Rh
dHVzKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwog
ICAgIGlmIChub2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCku
dG9SYXcoKSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZjOWRiMWE3YzU0NGZh
MWNhOThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5YTc5MTg0MmU4ODAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAt
MjUyLDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIGxpbmtC
dWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBsaW5rQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5rQnVmZmVyKTsKKyAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFhNDA5NGY1NzA2MGE3
Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkxYjI5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTk5LDYgKzE5OSwx
MSBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgICAgICBt
X3B1dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4o
Z2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlWYWwoY29uc3QgSklU
UHV0QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAg
IHsKKyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRC
eVZhbEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAgIHZvaWQgYWRkRGVs
QnlJZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBz
bG93UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3Jh
cHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBAIC0zNjAsNiArMzY1
LDcgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICBWZWN0
b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1f
Z2V0QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5
VmFsR2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3Jh
cHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAgICBWZWN0b3I8SW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9wdXRCeVZhbHM7CiAg
ICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPiwgND4gbV9k
ZWxCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5VmFsR2VuZXJh
dG9yPiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRJ
bkJ5SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2NGYwZDZmNDY0NjY0
ZDBmLi4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBFeGl0
TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3Rh
dGUpCiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFkMjc3YTE5YmQxYzlh
Li43Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJp
dmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCisjaW5jbHVk
ZSAiUHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oIgog
I2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCkBA
IC05Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAKIHN0cnVjdCBNdWx0
aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBW
ZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3RvcjxQdXRCeVZhcmlh
bnQsIDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0zMjEwLDE1ICszMjEw
LDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEluQnlTdGF0
dXMqPigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0dXMoKQorICAgIGJv
b2wgaGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVy
UHV0QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlTdGF0dXM7
CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0dXMoKQorICAgIFB1
dEJ5U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzUHV0QnlJ
ZFN0YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5SWRTdGF0dXMqPigp
OworICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNEZWxldGVCeVN0
YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggZTc1YmNm
ZThhMWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2ZkYWM4ZjIzNTE4Mjg3
MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
RmlsdGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEZpbHRlclB1
dEJ5SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGaWx0ZXJQdXRCeVN0
YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRlbGV0ZUJ5U3RhdHVz
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJTZXRQcml2YXRlQnJh
bmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCmlu
ZGV4IDY2NzgzNTU1ZGYyMTZkMThmOTBjNTk1NDZlYzc5MmQ1MGQ4ZmQ1OGEuLjFmNDE4MzE4YTRj
MGRlYzZkMmU5OWQ0MDlmNzFkYWZhNDY5N2IyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cApAQCAtMTI1OCw3ICsxMjU4LDcgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBA
IC0yNTU0LDE1ICsyNTU0LDEzIEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRob3Nl
IG5vZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMg
bWVhbnMgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2Ug
Y2FuIHNpbXBseSB0cnVzdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5
cGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2Ug
YXJlIHVzaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1
cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
PnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVudFNl
dCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9mZnNl
dCA9IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuY2xlYXIoKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmFk
ZChzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBk
YXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBk
YXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0
dXJuIG1fZ3JhcGguYWRkTm9kZSgKQEAgLTI2MTUsNyArMjYxMyw3IEBAIGNsYXNzIE9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAppbmRleCAxNjIyZGQ4YjFiNTIxY2M0MWRmYTg1YWI1MzI2MmVjZTgwZmU3NGYyLi44OWU1
ZWY0ZDg1MWVjOTBkNmQ5ODU1Y2E0N2NhNWJjNzgyNTcyZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAgY2xhc3MgUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIFdlYWtNYXBTZXQ6CiAgICAgICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6
Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAppbmRleCAxZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwLi5kNTQ5NjQ0
NTBiNjMyMjc0ODk4ZDY4YzhhOWJlOWY3YTc2Zjk4MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0
MWNmZDFlOWE1OGRkYzQyNS4uNWRhMDQzODdiNmQwZWU4OTg3NDhjMjllYzc3ODY0ZmJjOTFlYjBm
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCmluZGV4IDg4MDhiMTBjODI2YzUxMDY5Nzk3NDAwOWU5NmYxOTlmYThm
MTBhNGMuLmM4ZmMxNTc0MTU5ZDQ0NmNkZWM4OWU4N2NkNzE4ZDMwYTUyMDE2OWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAt
NTg3MSw3ICs1ODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5
U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1
dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDU0MTBkOTA4OTZk
YzRmMDEwNTc5MzBkZjgyZjY2MTkyYjgxZjZjMGYuLmM1ZTVjZjM2YTc3MGQxNTgzYjY5M2RmZDg4
MWQ2NDI0YWIxN2JjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCkBAIC0zMTIsOCArMzEyLDggQEAgY2xhc3MgVmFsaWRhdGUgewogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
IXZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRjaCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggZmRhNjRkMzVkYTM0Mjg4
OWM3OThjMDUxZTk1NzZlOGExZTMzYTM5Yi4uZjFhMzgwOWQ3ZWZlMzBmOGQ1OWJhMjFmYWNkMDcw
OWU0MzhiOTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgY2xhc3MgVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
ICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgpAQCAtNDIxLDcgKzQyMSw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDAzZjg2NTJjNmNiODJjNjIw
MjBkMWU2NmJiNTlmNDY1OTFkODNlNGMuLjgzYjUxYmE5Y2Y3NjVkYTA0NjM3M2E3OWIxY2EwMzMw
YzQzYzdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGIwMDFkMTMyZjAyZmZjMzgyNTNjMzhk
ZjJlNDliMGNmMzZlNjJmNjYuLmE1NDM4MDk2NTgwZTQyZjc1MTU0NmQzNTliY2IwNDExZGZkNDg2
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
QEAgLTE2NDksNyArMTY0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC04OTUxLDcgKzg5NTEsNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSk7CiAgICAgICAgICAgICAgICAgYmFzZVNl
dC5hZGQoc3RydWN0dXJlKTsKQEAgLTg5NjYsMTYgKzg5NjYsMTYgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRh
LnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Cisg
ICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAKICAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uLCB2
YXJpYW50LmtpbmQoKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5r
aW5kKCkpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRk
TGF6aWx5KAogICAgICAgICAgICAgICAgICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2lu
T3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtODk4Nyw3ICs4OTg3LDcgQEAg
Y2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9w
ZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNl
dCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9PSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlu
bGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0RTTC5yYgppbmRleCA2OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4Li43
OGZkNDk0M2Y5ZWNiYzRjMzVjN2NkY2IzMmI3Mzc3Y2FiOWYxZWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTQxLDcgKzE0MSw3IEBAIGRlZiBzZWxmLndyaXRl
X2J5dGVjb2RlX3N0cnVjdHMoYnl0ZWNvZGVfbGlzdCwgYnl0ZWNvZGVfc3RydWN0c19maWxlbmFt
ZSkKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZs
YWdzLmgiCiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDBiNGMyYjliZTBmNWZmZjE1MWEzYjA3ZTlh
YTI0ZmNjZjkwNTAzOTguLjQxMTg2ZGJlOTQyMDk2MjcwMGE1Yjk3NjkxM2ZmMGE3YjI0YjdhYTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTM1
Nyw3ICsxMzU3LDggQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1i
bGVyIHsKICAgICB9CiAgICAgdm9pZCB1bmJveERvdWJsZShHUFJSZWcgdGFnR1BSLCBHUFJSZWcg
cGF5bG9hZEdQUiwgRlBSUmVnIGZwciwgRlBSUmVnIHNjcmF0Y2hGUFIpCiAgICAgewotICAgICAg
ICBtb3ZlSW50c1RvRG91YmxlKHBheWxvYWRHUFIsIHRhZ0dQUiwgZnByLCBzY3JhdGNoRlBSKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2hGUFIpOworICAgICAgICBtb3ZlSW50c1RvRG91
YmxlKHBheWxvYWRHUFIsIHRhZ0dQUiwgZnByKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBib3hE
b3VibGUoRlBSUmVnIGZwciwgSlNWYWx1ZVJlZ3MgcmVncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9J
Q1N0YXRzLmgKaW5kZXggZjA0YzFmNDI4ZTEwYmZjNzFmYTVjZTM1ZTAwMjg2OGJiNzhhZGVmNi4u
OTFiM2IzMTU1MTBkYTY4MjRiM2M5NjM0MTBlMzM2ZDk1ODlhYmM3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9JQ1N0YXRzLmgKQEAgLTY3LDEwICs2NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBtYWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KSBcCiAgICAgbWFjcm8o
T3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwK
ICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkUHV0UHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRp
bWl6ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRBZGRBY2Nlc3NDYXNlKSBcCi0gICAgbWFjcm8oUHV0
QnlJZFJlcGxhY2VXaXRoSnVtcCkgXAotICAgIG1hY3JvKFB1dEJ5SWRTZWxmUGF0Y2gpIFwKLSAg
ICBtYWNybyhJbkJ5SWRTZWxmUGF0Y2gpIFwKKyAgICBtYWNybyhQdXRCeUFkZEFjY2Vzc0Nhc2Up
IFwKKyAgICBtYWNybyhQdXRCeVJlcGxhY2VXaXRoSnVtcCkgXAorICAgIG1hY3JvKFB1dEJ5U2Vs
ZlBhdGNoKSBcCisgICAgbWFjcm8oSW5CeVNlbGZQYXRjaCkgXAogICAgIG1hY3JvKERlbEJ5UmVw
bGFjZVdpdGhKdW1wKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMpIFwKICAg
ICBtYWNybyhPcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKaW5kZXggYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThlZmE0NzEz
Mi4uNTBkZTg1NWI2YWM5MGVlNmQzZDFjOTYxZTQ0ODQ4MjM5NWE0NjE2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcApAQCAtNTEwLDYgKzUxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgbV9nZXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2dldEJ5SWRX
aXRoVGhpc0luZGV4ID0gMDsKICAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRCeVZh
bEluZGV4ID0gMDsKICAgICBtX2luQnlJZEluZGV4ID0gMDsKICAgICBtX2luQnlWYWxJbmRleCA9
IDA7CiAgICAgbV9kZWxCeUlkSW5kZXggPSAwOwpAQCAtNjYyLDYgKzY2Myw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlk
SW5kZXggPT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJ
ZFdpdGhUaGlzSW5kZXggPT0gbV9nZXRCeUlkc1dpdGhUaGlzLnNpemUoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fcHV0QnlWYWxJbmRleCA9PSBtX3B1dEJ5VmFscy5zaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1faW5CeUlkSW5kZXggPT0gbV9pbkJ5SWRzLnNpemUoKSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9pbnN0YW5jZU9mSW5kZXggPT0gbV9pbnN0YW5jZU9mcy5zaXplKCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPT0gbV9wcml2YXRl
QnJhbmRBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtOTA5LDYgKzkxMSw3IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwog
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKKyAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
aW5kZXggNGRhN2EyZmQ2NmYxNTBjZmNkMzU5MDJmZTkzZTU0ZmVkMmE1YWQyZS4uMGRkZGZmNDky
YmEzMWJmZjA0YTA1MGI3NGIzMjEyZGE2MjFjZWZiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CkBAIC0yMjUsMjggKzIyNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5
VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9
IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBh
cnJheU1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21w
aWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9i
eXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJ
VCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2lu
ZCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAg
SklUIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTI3NSwxMCArMjUzLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0
aW9uRWZmb3J0KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRy
LCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxl
SWRlbnRpZmllcik7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1l
V2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIENhY2hlYWJsZUlkZW50
aWZpZXIpOwogCkBAIC0xMDgzLDYgKzEwNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
VmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAgICAgVmVjdG9y
PEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgICAg
ICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAgICAgVmVjdG9y
PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVElu
QnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5CeVZhbEdlbmVy
YXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1f
ZGVsQnlJZHM7CkBAIC0xMTEwLDYgKzEwODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQg
bV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1f
cHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZhbElu
ZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRf
TUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAg
ICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5k
ZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uYTkwYzg2OWQzOTc5
OTc2YzZmZmE2ZWRkMjNmYzMyNjM0NDJmNTlmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0Miw3ICsxNDIs
NyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAgIEVDTUFNb2Rl
IGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihj
b2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQs
IHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAgICAgOiBKSVRC
eUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQ
UikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0S2luZChw
dXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw2NyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9y
OjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiAg
ICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9y
KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwg
RUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKKyAgICA6IEJhc2UoY29kZUJsb2Nr
LCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVn
aXN0ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKKyAgICAsIG1fcHV0S2luZChwdXRL
aW5kKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIG1f
c3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAgbV9zdHViSW5m
by0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJlZ3MucHJv
cGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVH
UFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiA9
IHN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+YmFz
ZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIgPSB2
YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJvcGVy
dHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6Zmlu
YWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0
aFN0YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0aW9uX0dTc2lKSkMgSklUUHV0QnlWYWxH
ZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9wdXRLaW5kKSB7
CisgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwor
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmlj
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAg
ICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlz
U3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhh
cHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJSZWcgc3R1YkluZm9HUFIpCiAgICAgOiBC
YXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNjZXNz
VHlwZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCBlZTY4MTQxMDFhODFlYmQxNTViZjRk
YjY5M2ZmNDdjOGEyNzhmN2ZiLi4zMDViNzBkM2Y5MmIxZmUzYjVhNjY3ZGIzMzQ0YmI2NjdkNmZi
NDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAgY2xhc3MgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogCiBjbGFzcyBKSVRQ
dXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogcHVibGlj
OgotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAgICAgICA6IG1fZWNtYU1vZGUoRUNNQU1v
ZGU6OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1
bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgICAgICBDb2RlQmxvY2sqLCBKSVRU
eXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKQEAgLTE0Miwx
MCArMTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklU
QnlJZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0
aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBFQ01BTW9k
ZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CiAgICAgUHV0S2luZCBtX3B1dEtp
bmQ7CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKCkgPSBkZWZhdWx0Owor
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUs
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBw
cm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2Rl
LCBQdXRLaW5kKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkp
OworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1wOworICAgIH0KKworICAgIHZv
aWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBz
bG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CisKKyAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24o
KTsKKworcHJpdmF0ZToKKyAgICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmlj
dCgpIH07CisgICAgUHV0S2luZCBtX3B1dEtpbmQ7CisKKyAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CisgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OworfTsKKwogY2xhc3MgSklURGVsQnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewogICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCmluZGV4IDc1ZGM3YzM2OWYyYWQzZmFiMzIwYjhlYjc5ZmM3ZDc1M2Y2ODA4ZjkuLjQ0ZGJh
MGVkMTU1M2E2NTRhMmY0ZjdmZmZmMGFmYjE4ZjAxZjViNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
LSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5k
OjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3Qg
cmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29u
c2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAg
ICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVj
dCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZh
bHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpC
eUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3Qg
cmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29u
c2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAg
ICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3Qs
IHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3Qp
OworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmpl
Y3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5
SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCBy
YXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7
CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZp
ZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0
dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAgICAg
cmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1
Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05MjQs
MTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRfVU5V
U0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
b2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0
U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
SlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQor
c3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2Zp
bGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5
R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYnlW
YWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAo
YXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3Vu
ZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEsMzIg
Kzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUs
IGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CisK
ICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAg
ICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9m
aWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0
eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9T
dHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlk
ZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbElu
Zm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZhbHVl
LnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGlyZWN0
UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdl
dEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAgc3dp
dGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0
YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+
YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJv
ZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0
YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5k
ZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJ
bmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0
cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxk
Tm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5mby0+
c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJD
ZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkp
Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9kZS5p
c1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwg
Z2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAy
MywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBH
aXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1p
emUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitz
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1p
emluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9
IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1
ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0
aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vi
c2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkg
IT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91
dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVy
ZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsK
LSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5
TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5
VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlW
YWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5
TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9u
UmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAg
aWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3Jp
cHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VP
YmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAg
ICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBwcm9maWxl
LT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9i
amVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVu
dGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXph
dGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8o
KS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Cisg
ICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVy
dHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNv
ZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0
KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJz
Y3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAoc3Vi
c2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAg
ICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgo
MCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAg
ICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJ
bmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVC
bG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFs
SW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQg
PSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFj
Y2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+
Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQu
YXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6
Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAg
ICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7
CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBh
dGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBp
ZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5v
dERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRo
YW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAv
LyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBu
b24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAg
aXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAg
ICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAg
c2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgot
ICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAg
ICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZhbE9w
dGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0
ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIg
dHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJ
bmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0g
ICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKwor
ICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9k
ZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1
dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVl
IHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUgaWYg
aXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCisg
ICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2Rl
OjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlW
YWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNN
QU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJzY3Jp
cHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgo
KSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJS
b3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAg
SlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAo
aGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRl
bXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGpp
dEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFy
cmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJ
bmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5k
ZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkg
eworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZh
bEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0
UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVj
dCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxl
ZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhl
ZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAo
b3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9i
amVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0
KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJD
ZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUg
PSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJzY3Jp
cHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAg
ICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8t
PmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29k
ZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJ
bmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9
IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNj
ZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
YnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5j
YWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5h
c0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJs
b2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNl
VmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnko
dm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAg
ICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmll
cikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRC
eUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRp
b25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9u
UmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3Jl
IHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAg
ICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNl
ZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMg
MTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAg
ICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQg
dXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVw
LgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAg
ICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxP
YmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7
CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSog
cHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRp
b25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJz
Y3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFs
T3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBzdWJz
Y3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQg
PT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0
cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
LSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbElu
Zm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8s
IGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1Yklu
Zm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJv
bG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisg
ICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVD
TUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAotICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKyAgICBzdHVi
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkp
OwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxl
LCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxP
YmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywg
ZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBk
aXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlw
dCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxl
KiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwor
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5mby0+
dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6
OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCBjZDNlMWJkNDE0ZWNkMTcwYmE0YTI1NTg5MzhmMWVk
NTQ0M2FiODk1Li5kOGZkMWU3NDY0MjgxZTZlZDBlNmNjNzRlMzRjNzAyNWFiN2Q1YWVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsyMDMs
MTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbElu
Zm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwg
UHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkp
OwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5
VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1v
ZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJv
ZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2Zp
bGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJy
YXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFy
cmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtD
YWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENh
bGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKaW5kZXggZDM5YmM2ZDc1M2Q2NGQ2ZWY3M2E3OGE0NWY4YjlmNjU4MjUzNzIz
Zi4uYWYyZjhkMjQzOTRjZGE0ODU2MjU2ZWJmNDVhOWNhNzU0ZDQ2MTEzMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCw2NSAr
NDM4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2lu
ZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6
IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50
ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJ
c0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBh
dGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdElu
ZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50
MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0g
ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0
X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAg
fQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2Zp
bGUpOwogCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29w
eU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
cmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QzKSwgcmVnVDIsIGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
ZG9uZSkpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVs
c2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsK
KworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0
ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1CisgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CkBAIC02NjEsMTIgKzYyNywxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CisgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAg
ICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAo
aXNEaXJlY3QpCkBAIC02NzQsMTYgKzY0MywxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
ICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+
KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CisgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworCisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFs
dWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDMsIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTY5NCwyOCArNjYxLDI2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBh
cmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwg
cHJvZmlsZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9u
ID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGlzRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
T3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlW
YWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNzM2
LDE4ICs3MDEsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVu
dEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIGVjbWFNb2RlR1BSKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBzdHVi
SW5mb0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
IAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgQnlWYWxJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1w
KEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgaml0LnJldCgp
OwogCkBAIC04MDksMTMgKzc3NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVu
dEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1lbnRHUFI1Owog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VHUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQ
Uik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwgcHV0S2luZEdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CkBAIC04NTEs
MTQgKzgxNiwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFs
T2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBw
dXRLaW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOwogICAgIGppdC5wcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKQEAgLTMyOTAsODIgKzMyNTUsNiBAQCB2b2lkIEpJVDo6ZW1pdEJ5VmFs
SWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBDYWNo
ZWFibAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5w
dHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotCi0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSBmYWxzZTsKLQotICAgIHN3
aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERv
dWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGln
dW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgbmVlZHNM
aW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRB
cnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRl
QmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFR5
cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1v
ZGUpOwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyLCB0eXBl
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50
NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBDdXJyZW50bHks
IEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZlciBjb21lcyBoZXJlLgotICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4Mwot
ICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgICAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRy
LCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9j
b2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKG5l
ZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQocmVtb3ZlQ29kZVB0clRh
ZyhtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJsZUFkZHJlc3MoKSkgPT0gcmVtb3Zl
Q29kZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOwotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20sIG1fZmFyQ2FsbHMubGFzdCgpLmNh
bGxlZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaWYgKCFpc0RpcmVj
dCkgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRp
bmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5B
ZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAg
ICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1w
VGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xv
d09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDog
b3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1
cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRp
b25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkg
Y29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3Bw
KSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGlu
IGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1
dEJ5VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLQogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwpAQCAtMzQwNyw1MyArMzI5Niw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVj
dCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09
IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwot
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLQotICAgIEp1bXBM
aXN0IGRvbmVDYXNlczsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2lu
ZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVD
YWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1Bh
dGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRv
bmVUYXJnZXQpOwotICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKLSAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25I
YW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX25lYXJDYWxscykg
ewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGNhbGxTaXRlIDogbV9mYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUu
Y2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxs
U2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNo
QnVmZmVyKTsKLQotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3Bl
cnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0g
UHV0S2luZDo6RGlyZWN0KSA/ICJfZGlyZWN0IiA6ICIiLCBwcm9wZXJ0eU5hbWUudWlkKCktPnV0
ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVz
cy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1Yklu
Zm8oKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQgPSBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gcHV0S2lu
ZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBv
cGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1
cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlz
IGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQg
KEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQg
c3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPihCeVZhbEluZm8qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLXRlbXBsYXRlIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+
KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZp
ZXIpOwotCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzcwOSw3ICszNTUxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHkKICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwogICAgIGRvdWJsZUNhc2UubGluayh0aGlz
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICBtb3ZlSW50c1RvRG91YmxlKGVh
cmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEpOworICAgIG1vdmVJbnRz
VG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2NyYXRjaCwgZnBSZWdUMCk7CiAgICAgcmVhZHku
bGluayh0aGlzKTsKICNlbmRpZgogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNzVkMGJkN2Y2ZWYzNWM3NjI3
MzEzZjI2YmE2NWExNjhkODNiOTQ1Ni4uYjk4YmZlY2VkYWE1NTYwMWY5NWE4OGJlZGE2MWIwOWYx
YTM0MzQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCkBAIC01NDUsNyArNTQ1LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1w
JiBiYWQKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwogICAg
ICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwogICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAg
ICAgICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDAsIGZwUmVnVDEpOwor
ICAgICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdUMCk7CiAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwogICAgICAgICByZWFkeS5s
aW5rKHRoaXMpOwogICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMs
IHJlZ1QyLCBUaW1lc0VpZ2h0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApp
bmRleCAzN2E4MGIyOTU3NzIxMGYzNWUwNmQ4MWJhMTM0NWY2OTc4MDA5NjQ0Li40YjcxYTBmYTlm
ZDk5MDMxM2NhNGFiNzlkMTk0M2Y4YzgxZDdmMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKQEAgLTU2OCw1MyArNTY4LDk0IEBAIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlW
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
CiAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRL
aW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKK3N0YXRpYyBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5j
dGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1
dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgot
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
OworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsK
KyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
KyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAg
ICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGF1
dG8gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAg
IHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwot
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNs
b3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDog
eworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3RE
aXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5k
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTY4Miw4ICs3MjMsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jawogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9s
ZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEJ5S2luZCwgcHV0S2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC04MTcsMTIgKzg1
OCwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkQWRkQWNjZXNzQ2FzZSwgb2xkU3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwor
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAg
ICAKICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmlj
dCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkp
OwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwogCkBAIC04
MzUsMTIgKzg3NiwxMDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJ
RChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICByZXR1cm4gcmVz
dWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsK
IH0KIAotdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCkKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2lu
ZCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKwor
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkK
K3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgp
LmhlYXApOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKwor
ICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChp
c1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkg
LyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50
NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmlu
ZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGlu
ZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9y
YWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
bnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51
bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRl
cjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1
dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKIH0K
IAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xv
dCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2LDcgKzExMjEsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmICFz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
SW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVy
YXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJ
bkJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Oklu
QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5p
bml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5MSw1NSBAQCB2b2lkIHJlc2V0
R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
R2V0QnlLaW5kIGtpbgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgcmVzZXRQdXRCeShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtp
bmQga2luZCkKIHsKLSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxs
VGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIEZ1
bmN0aW9uVHlwZSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0g
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsK
LSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRG
dW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDog
eworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVk
RnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRh
cmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAg
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25U
eXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAg
ICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVu
Y3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsK
KyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
fQogCiAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6
ZWRGdW5jdGlvbik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5
S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KIH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2MzczYzBhYzM2Mjlk
OGU2Li5lY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBjbGFzcyBHZXRC
eUtpbmQgewogICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3MgUHV0QnlLaW5k
IHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxCeUtpbmQgewog
ICAgIEJ5SWQsCiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFzcyBJbkJ5S2lu
ZCB7CiAKIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2
b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCByZXBh
dGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFz
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7
Cit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUs
IFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaERl
bGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90Jiwg
SlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2Fz
Rm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQp
Owogdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0
dXJlU3R1YkluZm8mKTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJh
bWUqLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYp
Owogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwg
Q2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCByZXNldERlbEJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZvaWQgcmVzZXRJbkJ5KENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXNldEhhc1ByaXZh
dGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKaW5kZXggN2VlYTc1ODcw
ZTdiMTUyOTY5MTBkNWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2IwNzkxNGVlZDdmNjc3Nzk5MDFm
YmJhMzA2YmM0NzEyYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogLy8gVGhlIGZvbGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBmb3IgdGhlIG9wY29kZSBuYW1l
cy4gVGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRC
eVN0YXR1cy5jcHAgYW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8gYmVjYXVzZSB0aGVyZSBpcyBj
b2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlTdGF0dXMuY3BwKQogLy8gd2hp
Y2ggcmVmZXJzIHRvIHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZWZpeGVkIHdp
dGggImxsaW50XyIuCiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50YXRpb24sIHRoZSAyIGFyZSBl
cXVpdmFsZW50LiBIZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFsaWFzIGhlcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435846</attachid>
            <date>2021-08-18 22:54:42 -0700</date>
            <delta_ts>2021-08-19 01:48:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210818225441.patch</filename>
            <type>text/plain</type>
            <size>290498</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MWQ3NDhiYjE0NDkwZTRiYWJlYjliM2UyMWRiMmEwZjA4NGRmYzZhLi44M2I0MWQ5NjUwZTU1NjQy
OWU1ZGVhOWFjNjRmMzdmMjIwNzQzMGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTAgQEAKKzIwMjEtMDgtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgor
ICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVy
cy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnVuYm94RG91YmxlKToKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rp
b24pOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAq
IGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGlt
aXplKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChK
U0M6OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJl
Y3RQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWND
b250aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpT
Qzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVQdXRCeSk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRC
eSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OnJlcGF0Y2hQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlE
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuaDoKKwogMjAyMS0wOC0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBvcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eSByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQxY2Iz
MjZiZTcwNWQ3MzM5MWQxNWVmNDdlNzRhOTk0ZmMxODk4Yy4uZWIwYzFjODRiYTBmZDY3MDRmM2Yx
OGNiZDgzZmZjODU5MGI0M2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2
NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
Mjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkz
MzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBH
ZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0
YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2
IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTNCNEFBMThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUy
QUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUg
LyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5
IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTI4NjcsMTEgKzI4NjcsMTEgQEAKIAkJMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMz
Mjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOUExNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5OTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRW
YXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVZhcmlhbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdFJh
Y2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFBMDFERjc4NjA3
MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFC
QTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODY5OCwxMCArODY5OCwxMCBAQAogCQkJCTBGRDNFNDA4MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGMTVDRDIwMUJB
NUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwICovLAogCQkJCTBGMTVDRDIxMUJBNUY5
ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4
NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFu
dC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5o
ICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJ
MEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuY3BwICovLAogCQkJ
CTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8sCkBAIC0x
MDUxMCw4ICsxMDUxMCw4IEBACiAJCQkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5
UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyog
UHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8q
IFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MzMyQTQxNENBN0REOTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTNCNEFBMThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzMy
QTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0
NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uNzA3N2VmOWFlMzExNzZmNjM4
NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAt
MjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCiBi
eXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAotYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKK2J5dGVj
b2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRl
Y29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTXY3LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNdjcuaAppbmRleCBkZjg4Mzg2YTgzMjNkODY5MTJjZmU1MzUzMWUzYTgyZGZiNDRl
YjhlLi45MTE3YmI4NDRjNjA3ZWI1ZTUyMzNmYjM4YTQ1MjI0YjQ2NzM2NDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
aApAQCAtMTAwMSw5ICsxMDAxLDggQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk12NyA6IHB1Ymxp
YyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogICAgICAgICBtX2Fzc2VtYmxl
ci52bW92KGRlc3QxLCBkZXN0Miwgc3JjKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBtb3ZlSW50
c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQg
ZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJl
Z2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKICAgICAgICAgbV9hc3NlbWJsZXIudm1v
dihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCmluZGV4IDE0NDVjNzkxYjI4Y2Vm
NWRmYzE1NmMzMTI0YzZhNGUyMjIxYWMxYTQuLjc0ZDEyNzYyNWE3N2I1MTE2OWJhZGY5YWQzNWM3
ZTg1YjM1MzlhNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJNSVBTLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlck1JUFMuaApAQCAtMjA3Miw5ICsyMDcyLDggQEAgY2xhc3MgTWFjcm9B
c3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7
CiAgICAgICAgIG1fYXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KIAot
ICAgIHZvaWQgbW92ZUludHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3Jj
MiwgRlBSZWdpc3RlcklEIGRlc3QsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHZvaWQgbW92
ZUludHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnZtb3YoZGVzdCwgc3JjMSwgc3JjMik7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKaW5kZXgg
OGQwMjJlM2I4MjVmNThkMmVmNDg4MjFiMWMyYTk0MjU2OTFkMWI0OS4uYTY2OTk1OTcwNTUwYTlh
YjUxY2QyNmQ0OTE5NTY2OGYzYjBjOTRhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaApAQCAtMTgzLDE0ICsxODMsNiBAQCBj
bGFzcyBNYWNyb0Fzc2VtYmxlclg4NiA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiB7
CiAgICAgICAgIG1vdmVGbG9hdFRvMzIoc3JjLCBkZXN0MSk7CiAgICAgfQogCi0gICAgdm9pZCBt
b3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lz
dGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCi0gICAgewotICAgICAgICBtb3ZlMzJU
b0Zsb2F0KHNyYzEsIGRlc3QpOwotICAgICAgICBtb3ZlMzJUb0Zsb2F0KHNyYzIsIHNjcmF0Y2gp
OwotICAgICAgICBsc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7Ci0gICAg
ICAgIG9yUGFja2VkKHNjcmF0Y2gsIGRlc3QpOwotICAgIH0KLQogICAgIEp1bXAgYnJhbmNoQWRk
MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pbShpbW0ubV92YWx1ZSwg
ZGVzdC5tX3B0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAKaW5kZXggZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uOThl
MGIxOTYwOWIzMTRmYzQ0M2NmZTZlNzYzYmM1NTI2ZWQ3ZGFjOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVm
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUgdHlwZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxv
YWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29u
c3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6Cisg
ICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAg
Ym9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNl
IEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6
CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBj
YXNlIEluZGV4ZWREb3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9y
RWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBj
YXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3Jh
Z2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpA
QCAtNTY5LDYgKzY0NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZl
Y3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1w
ZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBl
KCk7CiAKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2Fk
OChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBpc0VtcHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpA
QCAtMTIyNywxNiArMTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJk
KAogICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKIAogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVl
KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVl
UmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1w
dHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BS
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZh
bHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9
IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25v
cmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBq
aXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAg
IGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0x
MjYyLDIxICsxMzYzLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAg
ICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BS
KTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJS
ZWcpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBz
dGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElm
TmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAg
aml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFs
dWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAg
ICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQ
UikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAg
ICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAg
ICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRj
aDNHUFIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFs
dWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4NywyNjYgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0
YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWls
QW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0
KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFp
bEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAg
ICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlh
cyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25l
IGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKENvcHlPbldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
dmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdz
KCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7Cisg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworI2VuZGlmCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJl
c2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGU7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBmYWlsQW5kSWdub3JlOworICAgICAgICBhdXRvIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
ID0gWyZdIHsKKyAgICAgICAgICAgIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgICAgIH07CisKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBzdG9yZVJlc3VsdDsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRl
eGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3Jh
dGNoMkdQUik7CisKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoVGVzdDY0
KENDYWxsSGVscGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSkpOworCisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOwor
ICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJ
bmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90
eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAg
ICAgIGV4cGVjdGVkU2hhcGUgPSBJbnQzMlNoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRTaGFwZSA9IERvdWJsZVNoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVj
dGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkp
KTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaXNPdXRPZkJvdW5k
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNo
RlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgICAgIGF1dG8gbm90SW50ID0gaml0
LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7
CisgICAgICAgICAgICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAg
ICAgbm90SW50LmxpbmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUo
c2NyYXRjaDJHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CisjZWxzZQor
ICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZUludHNU
b0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRl
LnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgcmVhZHkubGluaygmaml0KTsK
KworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoc3RhdGUuc2NyYXRj
aEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgICAg
ICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIo
dmFsdWVSZWdzKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAg
ICAgIC8vIFdyaXRlQmFycmllciBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGVtYmVkZGVyIHNpZGUu
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlKSB7CiAgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7Ci0gICAg
ICAgICAgICBpc0VtcHR5LmxpbmsoJmppdCk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmls
ZQorICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Om51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworCisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgJmppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc091dE9mQm91
bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAgICAgICAgICAgIC8vIGVtaXRB
cnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgICAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsK
KworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
ICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
bGluaygmaml0KTsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVBy
b3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJl
c3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKworICAgICAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9UeXBlZEFycmF5VHlwZShtX3R5cGUpOworCisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CisKKyAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSkpOworCisgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZh
aWxBbmRSZXBhdGNoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkK
KyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1
ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElmTm90
SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIGF1
dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZqaXQp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAg
ICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJs
ZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwg
dmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJz
KTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAg
IGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1f
c3R1YkluZm9HUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAo
aXNDbGFtcGVkKHR5cGUpKQorICAgICAgICAgICAgc2NyYXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQ
cmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVyc0J5UHVzaGluZygKKyAgICAgICAgICAgIGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisKKyAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFs
bHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEdQUiwgZmFsc2UpOworCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihwcm9w
ZXJ0eUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAg
ICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVt
ZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIUpTQzo6aXNTaWdu
ZWQodHlwZSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91bmRzID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBzY3JhdGNoM0dQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGF1dG8gdG9vQmlnID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW4sIHNjcmF0Y2gzR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgaml0LnhvcjMy
KHNjcmF0Y2gzR1BSLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBjbGFtcGVk
ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB0b29CaWcubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSwgc2Ny
YXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGNsYW1wZWQubGluaygmaml0KTsKKyAgICAgICAg
ICAgICAgICBpbkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTgo
c2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNo
R1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUxNih2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQ
Uiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc1R3bykpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBl
bmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwor
ICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgY2Fz
ZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzdGF0ZS5zY3Jh
dGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVGbG9h
dChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAgIGppdC5zdG9yZURv
dWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQ
Uiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yMTgzLDYgKzI1MzQsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNlIENoZWNrUHJpdmF0
ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICAvLyBU
aGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJhdGVXaXRoR3VhcmQoKSwgc2luY2UgdGhl
IGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8vIGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1
cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRlKCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNp
bmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFyZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3Mu
CkBAIC0yMTk2LDIyICsyNTYwLDMxIEBAIFR5cGVkQXJyYXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlw
ZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIHN3aXRjaCAoYWNjZXNz
VHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDg7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MTY7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgog
ICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKICAgICAgICAg
cmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjg0LDYgKzI2NTcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJl
ZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFjY2Vzc0Nhc2UmIHJocykKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgorICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAppbmRleCA0MTljOTlj
OTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJlLi4xODY0NGFkNTEwZjgwYmJkOTc1MWY4
MzY2NzBmZjkwYTkzMTA4NDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAgY2xhc3MgQWNjZXNzQ2FzZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNlPiB7CiAgICAgICAgIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwK
ICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0
cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQsCisgICAgICAgIEluZGV4ZWRJbnQz
MlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3RvcmUsCisgICAgICAgIEluZGV4ZWRDb250
aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSwKKyAgICAgICAg
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZSwKKyAg
ICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVpbnQ4X3QgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAppbmRleCBmYTBhNmQ1MjNiN2FkMGRmODgy
MTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAyNTk2YmY2ZWE4ZmY5YThhNzJiNGRjMmEx
ZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0
dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAu
aApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlua1N0YXR1czsKIGNsYXNzIENvZGVCbG9j
azsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5CeVN0YXR1czsKLWNsYXNzIFB1dEJ5SWRT
dGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNzIERlbGV0ZUJ5U3RhdHVzOwogY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJbmZvOwpAQCAtNDgsNyArNDgsNyBAQCBz
dHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsU3RhdHVzIHsgbnVsbHB0
ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAgSW5CeVN0
YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAgUHV0QnlJZFN0YXR1cyogcHV0U3RhdHVz
IHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07CiAg
ICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7IG51bGxwdHIgfTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMzYWRkMWZmZTY2Mjc1ZDkxMTQuLjQ3MTM1MTlk
YmE5NGIyMTRmY2U0NTcxMGQ3NmIyMTIzYWZkNzBiNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtMTAyMiw2ICsx
MDIyLDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNl
OjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9h
ZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
NWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5
dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbXBs
ZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5j
bHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29s
IFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJp
YW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92
YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0g
cHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmls
ZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAg
ICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55IHBsYWNl
IGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBp
dCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0g
ICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgotICAgIEFT
U0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVjdHVyZUlE
IHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVj
dHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1l
dGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgewotICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0K
LSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsK
LSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFu
dDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01h
cCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4
aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxv
Y2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAg
IFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKLSAg
ICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9j
a2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRC
bG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vs
c2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVTRURfUEFS
QU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJMRShKSVQp
Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCi0g
ICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAot
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVj
dHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKLSAg
ICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsK
LSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3
ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0gICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAg
ICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
Q2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1
YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0Owot
ICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29u
c3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoYWNj
ZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5
UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3Rh
dHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5j
b25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBD
b21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0
U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0
YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJv
ZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNv
bmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0
YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9t
QWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFy
aWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5zaHJp
bmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAgCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAs
IElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0YXR1czo6
RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4
aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0RmxhZyBk
aWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4
KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7
Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKLSAg
ICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJl
c3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5s
aW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxp
bmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUJsb2Nr
LCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAgICAgICAg
ICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3Vs
dC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5s
aW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOwotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0Owot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBj
b250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBjYWxsRXhp
dFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICByZXR1cm4g
Ymxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcHV0
ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRF
eGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgo
KnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0g
ICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0g
ICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMg
cmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
Lm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50
eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
LCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAg
ICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBv
biBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8gc2luY2Ug
aXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2Us
IHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNl
cHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0g
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXND
YWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRl
OjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5
UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlcGxh
Y2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAv
LyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFj
ZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0
ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNo
eSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRl
IG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAgICAgICAg
ICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3
ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8vIFNvLCBi
ZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAgICAgIFB1
dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVO
YW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNl
IGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAgICAgICAg
Ly8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBu
ZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBp
dCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlz
U2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
LQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNp
dGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAgLy8gdHJ1
ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAgIC8vIERv
bid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNw
b25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2lu
Y2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBz
dHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0g
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAg
aWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQu
aXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgIHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXpl
IGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBj
YWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJhbnNpdGlv
bikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAg
ICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAgYm9vbCBk
aWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgot
Ci1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlmIChtX3N0
YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmICht
X3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3Zh
cmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2Vz
Q2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUg
dm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10
ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0K
LWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAoUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFyaWFudC5m
aW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAg
ICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2Fs
bHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAKLSAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgICp0aGlz
ID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0g
ICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJldHVybiBt
ZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJp
YW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICByZXR1
cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBmb3IgKFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5maXhU
cmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50cy5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lkIFB1dEJ5
SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmludCgiKE5v
SW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1w
bGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3
OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRGbGFnLmgi
Ci0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5mb1N1bW1h
cnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFZNOwot
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVD
aGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9y
aWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHVi
SW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8vIEl0J3Mg
dW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZvcm1hdGlv
biwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5k
LgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBz
bG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mga25vd24g
dG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9
OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1h
dGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3Rh
dGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8
IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5
SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246
Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZv
U3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQ
YXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0gTWFrZXND
YWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQotICAg
IHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAgIAotICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAm
LCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0
ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAgIAotICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2Nr
LCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0
U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYgRU5BQkxF
KEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2VuZGlmCi0g
ICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgCi0g
ICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsg
fQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9y
bWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
U2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wg
bWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25z
dDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
bnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4mIHZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9
Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7
Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAgCi0gICAg
dm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQpCi0gICAg
c3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEp
OwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2Rl
QmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICAKLSAg
ICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNo
cmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJ
ZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEz
ODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRC
eUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJI
ZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5
SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5SWRWYXJp
YW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYgUHV0QnlJ
ZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAg
bV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRT
dHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAg
ICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0g
b3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAg
IG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9j
YWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVs
bHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3Vs
dC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0
Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3Ry
dWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5t
X2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwot
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNh
bGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5
SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAgICBSRUxF
QVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9v
bGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
b2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJl
KQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFB1dEJ5
SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlm
IChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25k
aXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVz
U3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRy
YW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZh
cmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkp
IHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0
QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5kKCkgPT0g
U2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zm
c2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAg
IGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewotICAgICAg
ICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgQVNT
RVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJpYW50ID0g
b3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1Zhcmlh
bnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgICAg
ICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7
Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJn
ZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIu
bV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1
cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9j
b25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxsTGlu
a1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBpZiAoISht
X2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2Nv
bmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAg
IGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0
Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgICAgICBt
X2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAg
IAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFu
dCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwotICAgIEFT
U0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZzZXQgPT0g
cmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMo
KSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAgICBBU1NF
UlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8vIFRoaXMg
c29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdo
aWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVj
dHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBU
aGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGlu
ZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAgIGlmIChy
ZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlm
IChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVy
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJlLm1lcmdl
KG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAg
aWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAo
dmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXpl
KFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAu
aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXpl
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVt
cEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAot
ewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5w
cmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgUmVw
bGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNv
bnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwg
IiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246
Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250
ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAgcG9pbnRl
ckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAg
ICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBv
ZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNl
IFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGlu
Q29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250
ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnByaW50KCIs
IG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAq
bV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzVhNzNh
MmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJv
cGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5kIHsKLSAg
ICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9uLAotICAg
ICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAgICAgICAg
OiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAg
ICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFB1
dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQm
IG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1dEJ5SWRW
YXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwot
ICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwotICAgIAot
ICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkg
PT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwot
ICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAgewotICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwg
a2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9
Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRp
dGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3Ig
U2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZv
ciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyBy
ZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAg
IAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0g
ICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJvb2wgb3Zl
cmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0g
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0
dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0gICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlT
dGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40NmJjY2E2N2NmMTg2YzQ2YmRhMDMzMDZiYTA0M2MwNDBmYTdjYTAwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRC
eVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRl
clNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1Zh
cmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OnNocmlu
a1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1dEJ5U3Rh
dHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHByb2ZpbGVk
QmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAgc3dpdGNo
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwor
ICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8gaGF2ZSBh
IGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2YXRlX25h
bWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVx
dWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8gSUMgaW1w
bGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRp
Zmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5t
X29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisKKyAgICBT
dHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Cisg
ICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVs
bHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsK
KyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdT
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAg
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICgh
KGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0K
KyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1
cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIsIHN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNpZiBFTkFC
TEUoSklUKQorUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4
aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxv
Y2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOworICAg
IFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBp
ZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
ICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdp
bihieXRlY29kZUluZGV4KSkuc3R1YkluZm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0ID0gY29t
cHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZv
LCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNv
bXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BBUkFNKG1h
cCk7CisgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRXhp
dFNpdGVEYXRhKTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVG
b3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBi
YXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2Nr
ZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KSkpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0
YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3Ry
dWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOwor
ICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoc3VtbWFyeSk7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsK
KyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3
ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAg
CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQorICAgICAg
ICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJ
bmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHltb3JwaGlj
QWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAgICAgIFB1dEJ5
U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAg
ICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIGlmIChh
Y2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJl
cGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5z
dHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYXV0
byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRy
YW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBhY2Nl
c3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAg
ICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNz
LmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYXV0byB2
YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vzcy5pZGVudGlmaWVyKCksIGFj
Y2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBs
ZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVyZSwgYWNj
ZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxp
bmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1
ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2Fs
bExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vzcy5pZGVu
dGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdl
dFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENv
ZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1
c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7Cisg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0g
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNv
ZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFz
ZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29udGV4dCog
Y29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250
ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNzID0gWyZd
IChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAg
IFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQs
CisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAg
IGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJh
c2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNT
ZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dW
ZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0QnlTdGF0
dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICAg
ICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywg
Y2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzdWx0
LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAgICAgICAg
cmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5kZXgoKnVp
ZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgIGlm
IChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAgICAKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0Owor
ICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRb
aV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0g
R2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgp
OworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMp
OworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBX
ZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRl
TmFtZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBh
cmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0
YWtlIAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KKyAgICAg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0Y2hwb2lu
dFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0
LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRl
cywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNl
dC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5
IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAgICAgICAg
ICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hw
b2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJl
YWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEg
bGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFs
b25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1dEJ5VmFy
aWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4gaGF2
ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0CisgICAg
ICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1c2Ug
aXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0
YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNsb3cgcGF0
aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAgICAgICBp
ZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRo
YXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlz
IHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNr
cy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rp
b25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gSWYg
dGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmpl
Y3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBh
ZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChw
cml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAg
ICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8v
IFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRo
ZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9u
ID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAg
ICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAK
KyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeVZhcmlh
bnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRp
b25TZXQsIG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0
LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIFB1
dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBNYWtl
c0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9zdGF0ZSAhPSBT
aW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJpYW50c1tpXS5t
YWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6c2xvd1ZlcnNpb24o
KSBjb25zdAoreworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0Nh
bGxzIDogVGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0QnlTdGF0
dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJZGVudGlm
aWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAg
ICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9B
R0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3Ig
KFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQubWFy
a0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZpbmFsaXpl
KFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
IHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6
Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIubV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBtZXJn
ZVNsb3cgPSBbJl0gKCkgeworICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxz
KCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsK
KyAgICB9OworICAgIAorICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1h
dGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQor
ICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAgICAgZm9yIChj
b25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgeworICAgICAgICAg
ICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVy
Z2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBNYWtlc0Nh
bGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNl
dCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAg
ICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworICAgIGlmICht
X3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9
CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91
dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFu
dHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93
UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxs
cykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzJhMWM3M2M4ZjQx
Y2ExOTJlNThkNGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhpdEZsYWcu
aCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtp
bmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5mb1N1bW1h
cnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFZNOwor
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1Y3R1cmVD
aGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9y
aWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHVi
SW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJdCdzIHVu
Y2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3JtYXRpb24s
CisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4K
KyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xv
dyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtub3duIHRv
IHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzCisgICAgfTsK
KyAgICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9u
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3RhdGUgc3Rh
dGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0
YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3Rh
dGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVz
KFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdW1tYXJ5
KSB7CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgorICAgICAg
ICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6
OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xv
d1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0QnlWYXJp
YW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAgICAgICAg
bV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRC
eVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRl
eCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0
JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBi
YXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0
YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0
YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4pOworI2Vu
ZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Cisg
ICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1h
dGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQorICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJzaW9uKCkg
Y29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92
YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiYgdmFy
aWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0QnlWYXJp
YW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9
CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5nbGVJZGVu
dGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Cisg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlT
dGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisj
aWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZv
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0aWMgUHV0
QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9yPFB1
dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAK
QEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50
LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUg
IkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYg
b3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQoreworICAgICp0
aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVyYXRvcj0o
Y29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7
CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBtX25ld1N0
cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0ID0gb3Ro
ZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBp
ZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG1h
a2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICBl
bHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRlbnRpZmll
ciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1dEJ5VmFy
aWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
eworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVz
dWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50IHJl
c3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlv
bjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgcmVzdWx0
Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVyKENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0
YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOwor
ICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMg
PSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1
Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25l
d1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpCit7
CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3RydWN0
dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFjZTsKKyAg
ICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBj
YXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0
QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2lu
ZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtpbmQoKSA9
PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQ
dXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90aGVy
Lm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1faWRlbnRp
ZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5vdFNl
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAgICBBU1NF
UlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5t
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX29s
ZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKKyAgICAg
ICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
VHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVjdHVy
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmICgh
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VkQ29uZGl0
aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7
CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNldHRl
cjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtTdGF0
dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1l
cmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFtZXJnZWRD
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJh
c2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgIAor
ICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJn
ZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpCit7Cisg
ICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFjZS5tX2tp
bmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQp
OworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFTU0VSVCgh
cmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBv
bmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcg
ZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUg
b3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0CisgICAg
Ly8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJlcGxh
Y2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5tX29sZFN0
cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lk
IFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklT
SVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKK30K
KwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZp
c2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChTbG90Vmlz
aXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQoreworICAgIGlm
ICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0cnVj
dHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFy
ZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jYWxsTGlu
a1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxw
dHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjwiKTsK
KyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVtcHR5PiIp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAg
b3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUo
KSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgb3V0LnBy
aW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUo
KSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5l
d1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQobV9j
b25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAg
IG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUo
KSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0
LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zm
c2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7
CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQu
aApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtTdGF0dXM7
CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBSZXBsYWNl
LAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAgIAorICAg
IFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgICAgIDog
bV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgICAg
ICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVyKFdURk1v
dmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlhbnQoY29u
c3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0
QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2FjaGVhYmxl
SWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAgIAor
ICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVyLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIsIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAgIAorICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
UmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0
dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2lu
ZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29s
ZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAg
IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2lu
ZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9Cisg
ICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24p
OworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIHZvaWQg
Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdyaXRlc1N0
cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Owor
ICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlv
blNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0
dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0
ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1
cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQg
aGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3Rh
dHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlW
YXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Cisg
ICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlW
YXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
bV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1f
aWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25X
aXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAgIEtpbmQg
bV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVyZVNldCBt
X29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAgICBDYWNo
ZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMu
Y3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcuLmZjZTBm
NGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYyLDEwICs2
MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAg
ICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0YXR1cykK
K1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewotICAgIGF1
dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwotICAgIFB1
dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0YXR1c1B0
ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0dXMqIHJl
c3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihj
b2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpA
QCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGVJ
bXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykKICAg
ICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZvciAoYXV0
byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgK
aW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5ODNkYmM3
NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2lu
Y2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2Vz
IHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMqIGFkZEdl
dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwotICAgIFB1
dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1
dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRkSW5CeVN0
YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERlbGV0ZUJ5
U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgRGVsZXRl
QnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICAK
ICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29k
ZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1cz4+PiBw
dXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPElu
QnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM+Pj4g
Y2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNlYjIzZGMz
Y2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3ODE5ZDQ3
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBj
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRHZXRC
eShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJRChjb2Rl
QmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHJl
c2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQdXRCeShj
b2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxvY2ssICp0
aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4ZTZlMjUw
MWFhYjE4ZTU1ZDQxYTQuLmUyMjU0MGMwOWJjNzgzZTdkOGUwNmQ1M2I3Y2E4MDg3MWVlNjcyMjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7
CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFsLAotICAg
IFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAgICBJbkJ5
VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQxYzBiNDZh
NmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4MjEuLjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0
OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAK
ICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1hdGhDb21tb24u
aCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0
dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09i
amVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAg
ICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAg
ICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0
aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
OwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAodGhp
c1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVl
OwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJp
YW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBu
ZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBu
ZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApA
QCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAg
ICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAgICAgICAg
IG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UodGhpc1NldCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAsMTAgKzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYg
dmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBpc0RpcmVj
dCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8fCBub2RlLT5vcCgpID09IFB1dFByaXZh
dGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8gcHJpdmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUt
Pm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9kZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgp
IDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1
cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlT
dGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAg
ICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAg
ICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgICAgICBu
b2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICAgICAgaXNEaXJlY3QsIHBy
aXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOwpA
QCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBUcmFu
c2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMo
KSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDog
c3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNv
bmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7
CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAg
ICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0
cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlv
bigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxh
Y2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0
cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDczLDcgKzQ0NzMsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1MiwxMCArNDY1MiwxMCBAQCB2b2lkIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6IHsKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYg
KHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgICAgICBub2RlLT5wdXRCeUlk
U3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKKyAg
ICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50
b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
LmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgxNWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3
NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5j
cHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTEyNjUsNyArMTI2NSw3IEBAIGNs
YXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYzZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgy
MjUzZjU5NDNiZDYyN2IuLjdmNDAyZTY5N2Y5ZGEwN2E0YzU1YWRhNTEyYzQ3OWRjNGYyMjM3NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNs
dWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcgKzczLDcgQEAKICNpbmNsdWRlICJQcmVjaXNl
SnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVk
ZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUg
IlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAg
LTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICBib29sIGNoZWNr
UHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0
eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBjaGVja1ByZXNlbmNlRm9y
UmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlW
YXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgLy8gV29y
a3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5VmFy
aWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KICAgICBOb2RlKiBsb2Fk
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBj
b25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAg
Tm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlW
YXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
dm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI1MywxMyArMjUyLDEz
IEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2b2lkIGhhbmRsZUdldFByaXZhdGVOYW1l
QnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAg
ICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25z
dCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOworICAgICAgICBOb2Rl
KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3Rh
dHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgK
LSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBO
b2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0
LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAgdm9pZCBoYW5k
bGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50
aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRC
eUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgICAgIE5vZGUqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVl
LCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgdm9pZCBo
YW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZSBub3QgdG8g
aGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAvLyB0aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZQog
ICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5IHJhcmUgaWYgdGhleSBkaWRuJ3QpLiBOb3Rl
IHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nCi0gICAgICAgICAg
ICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBo
ZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5SWRTdGF0dXMgd29yay4KKyAgICAg
ICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0
cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlTdGF0dXMgd29yay4KIAog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdodCBub3csIGlmIHdlIGhhdmUgYW4gT1BDUywg
d2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0aGlzIHdpbGwKICAgICAgICAgICAgICAgICAv
LyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQg
ZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50
JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2Vu
Y2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFy
aWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1
dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKQEAg
LTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZp
cnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBC
eXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0
QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgTm9kZSog
YmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3Qg
UHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9k
ZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVj
dCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAg
ICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8g
UHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1v
ZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgocHV0QnlTdGF0dXMubWFrZXND
YWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcElu
Zm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQ
dXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4
IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgY29uc3QgUHV0QnlTdGF0dXMm
IHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwg
RUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkg
fHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5s
aW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAo
IXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwg
IU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1
cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7
Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1h
a2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxs
cygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
ZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25z
OjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewotICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygp
ID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJ
bmRleC0tOykgewotICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJp
YW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBpZiAocHV0QnlTdGF0dXNbdmFyaWFudElu
ZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNb
dmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0
LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeVN0YXR1c1t2YXJp
YW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21h
TW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9u
KCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0
QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1
dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAg
IGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRh
LT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11bHRp
UHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0g
MSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBd
OworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNvbnN0
IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRj
aCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7
Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3Jp
Z2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJl
cGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29k
ZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBzdG9yZShiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSht
X2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwxMiArNTA2NywxMiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKLSAgICAgICAgYWRkVG9HcmFw
aChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1
cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgICAg
ICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJh
c2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBhZGRU
b0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlk
U3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpTZXR0ZXI6IHsKKyAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3Bl
Y0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlm
ICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0Rp
cmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUp
OworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KIH0KIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgIE5vZGUq
IGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0
YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQorICAgIGNvbnN0
IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmll
bGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkp
IHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0
YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25z
Ojp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQo
KSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgYWRkVG9H
cmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZh
dGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAg
aWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygp
CisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICgh
bV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAg
ICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAg
ICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHlt
b3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICB8fCBwdXRCeVN0
YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
Z0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlk
LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwg
dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MjExLDI5ICs1MjEw
LDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAg
ICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBt
X2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAgICAgCi0gICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCi0g
ICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVz
LnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQg
OiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSog
c3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0g
bV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJp
YW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMg
PSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0
LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NF
UlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlh
bnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQu
a2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogeworICAgIGNhc2Ug
UHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRL
aW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRU
b0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRT
dGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVz
KSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9u
KCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJh
bnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgp
KTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFw
aC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsK
ICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAg
IGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMs
MzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAg
ICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAg
ICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihj
dXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRo
ZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAgICAg
Ly8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0
ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8gZnJvbQotICAgICAgICAgICAgICAgIC8v
IExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwgdGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlW
YWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFs
SW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAg
ICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAg
ICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlw
ZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
aWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAg
ICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhp
ZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25z
dGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0Nv
bnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIFB1dEJ5
U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0Nv
bnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIo
KSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRp
Zmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFu
dCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9w
SW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJv
cGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIs
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVy
LCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwor
ICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodHJ5Q29tcGls
ZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVz
LCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYg
KCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5dGVjb2RlLm1fcHV0S2luZCksIGJhc2Us
IHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2
YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1NiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAg
ICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogCi0gICAgICAg
ICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgcHV0QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwg
bV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgICAg
IGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQ
dXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlk
ZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJ
bmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAgICAgaGFuZGxl
UHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGRpcmVjdCwgbmV4dE9wY29kZUlu
ZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTc5NzksMTMgKzc5NjgsMTMgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlk
ZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NS
RXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1czsKKyAgICAgICAg
ICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAgICAgICAgICAgICAgICAgaWYgKHVpZCkKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9u
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVG
b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1
cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6OlRha2VzU2xvd1BhdGgpOwogICAgICAgICAg
ICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxCi0gICAgICAgICAgICAgICAgICAg
IHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAgICAgICAg
ICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UK
ICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUoKSAhPSAx
KSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9n
ZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29k
ZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODgxOSw0NSArODgw
OCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRl
Y29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQogICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5
dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQg
PT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZh
bHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2lu
KGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAg
ICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUg
YmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAgICAgLy8gQXQg
dGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIGlmIChieVZh
bEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAg
ICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aAotICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBjb21waWxl
ZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5m
by0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
TnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwor
ICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAgICAm
JiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKworICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMg
PSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1
cnJlbnRDb2RlT3JpZ2luKCkpOwogCisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7
CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAg
IEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNl
bGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJv
emVuKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXVpZC0+aXNTeW1ib2woKSk7CisgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1
cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAg
ICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRl
bnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUs
IHN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7Cisg
ICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7CiAgICAgICAgIH0KLQotICAgICAg
ICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2Us
IGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0Rp
cmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2VjbWFNb2RlKTsKICAgICB9CiAKICAgICBp
ZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEu
LjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJl
YWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRz
OgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0
YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApp
bmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1
ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBAQCBi
b29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1
czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVm
NDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQw
YzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAg
ICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwog
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIo
WyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
c3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMsOSBA
QCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6
cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFy
aWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyArMTIx
MSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGls
ZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4
SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAg
ICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUs
IGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+
Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0gICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNzIENv
bnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgICAg
ICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgaWYg
KGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25l
LCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlmICgh
YmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAg
ICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgIG5v
ZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRl
RmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQy
NCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFu
c2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBmb3Ig
KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwg
bmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgbmV3
U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxs
b3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCiAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5
U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBFZGdl
KGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFl
Li5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBkb2Vz
R0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1Y2Yy
ZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5kZTRmMjNmYmFhMGM5NmRiYzhhYWM1MjQ5MTUz
Zjk4NmUzOThhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKQEAgLTI4NjUsNyArMjg2NSw3IEBAIGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICBjYXNlIENQVUludHJpbnNpYzoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGE4NDA2OGU3NzQ2YzlkYzQz
OTQxZTUxYzhlMzE1ZGE3MzVkZmUwZjMuLjBhYTgwZmYwNjFhOTZiMGQ1MzVkNjA4ZjBhOTUwODc2
MzhmODZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zODUs
OCArMzg1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFy
KiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAqbm9kZS0+Z2V0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0luQnlTdGF0dXMo
KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+aW5CeVN0YXR1cygpKTsKLSAgICBp
ZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICpu
b2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChub2RlLT5oYXNQdXRCeVN0YXR1cygpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeVN0YXR1cygpKTsKICAgICBpZiAo
bm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
ImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpLnRvUmF3KCkp
OwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKaW5kZXggOTEwY2YxMzk5ZmM2YzlkYjFhN2M1NDRmYTFjYTk4YmQy
M2NiM2M2OS4uMTJmMjlmMTA3MTU4YWZiMDBjNjU4YTZkZjQzOWE3OTE4NDJlODgwMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTI1Miw2ICsy
NTIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBsaW5rQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgbGlua0J1ZmZlcik7CisgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZGVsQnlJZHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fZGVsQnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2luQnlJZHMsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCmluZGV4IDk2YmZjNWEzMDM5YTM2MGZkMTBhYTQwOTRmNTcwNjBhN2NkYTlhOTIu
LjM2MTc0Nzc4MWZjZDZlNzkxNWU3YTI1OTY4NDY1ZDA3YjY5MWIyOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAgLTE5OSw2ICsxOTksMTEgQEAgY2xh
c3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICAgICAgbV9wdXRCeUlk
cy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xv
d1BhdGgpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFB1dEJ5VmFsKGNvbnN0IEpJVFB1dEJ5VmFs
R2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKKyAgICB7CisgICAg
ICAgIG1fcHV0QnlWYWxzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5l
cmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKKyAgICB9CisKICAgICB2b2lkIGFkZERlbEJ5SWQoY29u
c3QgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgp
CiAgICAgewogICAgICAgICBtX2RlbEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklU
RGVsQnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwpAQCAtMzYwLDYgKzM2NSw3IEBAIGNs
YXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgVmVjdG9yPElubGlu
ZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRz
V2l0aFRoaXM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeVZhbEdlbmVy
YXRvcj4sIDQ+IG1fZ2V0QnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklU
UHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJZHM7CisgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlWYWxzOwogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdlbmVyYXRvcj4sIDQ+IG1fZGVsQnlJZHM7
CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeVZhbEdlbmVyYXRvcj4sIDQ+
IG1fZGVsQnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUSW5CeUlkR2Vu
ZXJhdG9yPiwgND4gbV9pbkJ5SWRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAKaW5kZXggZWM1YThmYjZlYWNlMjlkMzVlZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQwZi4uMmJk
NGFlNDUzNTA0Y2Q2Yjc4ZDhkOTFlMjQ5YjIwZmE3MzBjM2M4YSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRXhpdE1vZGUgbWF5
RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBTdGF0ZVR5cGUmIHN0YXRlKQogICAg
IGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKaW5kZXggYWMyYjRiNWYwMjgzOWM4YWJhYTFkMzliMzUxZDI3N2ExOWJkMWM5YS4uN2NhYTIw
MjAxMmRjYTU4YmRiOTg2OTU4NjQ0NmEyNDhhNThlMzNkMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgorI2luY2x1ZGUgIlB1dEJ5
VmFyaWFudC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFZhcmlhbnQuaCIKICNpbmNsdWRl
ICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgpAQCAtOTIsNyAr
OTIsNyBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogCiBzdHJ1Y3QgTXVsdGlQdXRCeU9m
ZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVjdG9yPFB1
dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50LCAyPiB2
YXJpYW50czsKICAgICAKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBi
b29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwpAQCAtMzIxMCwxNSArMzIxMCwxNSBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxJbkJ5U3RhdHVzKj4oKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNQdXRCeUlkU3RhdHVzKCkKKyAgICBib29sIGhhc1B1
dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEZpbHRlclB1dEJ5SWRT
dGF0dXM7CisgICAgICAgIHJldHVybiBvcCgpID09IEZpbHRlclB1dEJ5U3RhdHVzOwogICAgIH0K
ICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRCeUlkU3RhdHVzKCkKKyAgICBQdXRCeVN0YXR1
cyogcHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1B1dEJ5SWRTdGF0dXMo
KSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mby5hczxQdXRCeUlkU3RhdHVzKj4oKTsKKyAgICAg
ICAgQVNTRVJUKGhhc1B1dEJ5U3RhdHVzKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8
UHV0QnlTdGF0dXMqPigpOwogICAgIH0KIAogICAgIGJvb2wgaGFzRGVsZXRlQnlTdGF0dXMoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IGU3NWJjZmU4YTFhYzM3
MWEwMmU1NjU0OTZiOTg3OGQ5ODdlZTRhZDAuLjlhOTBhNGNmZGFjOGYyMzUxODI4NzIyNGVkYmVl
NWZkODlmNjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKQEAg
LTU0Niw3ICs1NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJHZXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlcklu
QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRmlsdGVyUHV0QnlTdGF0dXMsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJEZWxldGVCeVN0YXR1cywgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggYjFjZmVlOGFjZWMzOGNjMDVh
NDE2ZWFiZWJiOWUyMjIzNWUxN2U4Yi4uMjg5NzM3OGJmOTg1OGIxYzRjZmE2YTMxMTAyOGNiYTBj
YmVkZGY2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjE1LDIxICsyMTUsNiBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayog
YmFzZWxpbmVDbwogCiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgog
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogewotICAgICAgICAgICAg
aWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWwpIHsKLSAgICAg
ICAgICAgICAgICAvLyBXZSBjb21waWxlIG9wX3B1dF9ieV92YWwgYXMgUHV0QnlJZCBhbmQgaW5s
aW5lcyBTZXR0ZXJDYWxsIG9ubHkgd2hlbiB3ZSBmb3VuZCBTdHJ1Y3R1cmVTdHViSW5mbyBmb3Ig
dGhpcyBvcF9wdXRfYnlfdmFsLgotICAgICAgICAgICAgICAgIC8vIEJ1dCBzdGlsbCBpdCBpcyBw
b3NzaWJsZSB0aGF0IHdlIGNhbm5vdCBmaW5kIFN0cnVjdHVyZVN0dWJJbmZvIGhlcmUuIExldCdz
IGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8uCi0gICAgICAgICAgICAgICAgLy8gMS4g
QmFzZWxpbmUgQ29kZUJsb2NrIChBKSBpcyBjb21waWxlZC4KLSAgICAgICAgICAgICAgICAvLyAy
LiAoQSkgZ2V0cyBERkcgKEIpLgotICAgICAgICAgICAgICAgIC8vIDMuIFNpbmNlIChBKSBjb2xs
ZWN0cyBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHB1dF9ieV92YWwsIChCKSBjYW4gZ2V0IFN0cnVj
dHVyZVN0dWJJbmZvIGZyb20gKEEpIGFuZCBjb3BtaWxlIGl0IGFzIGlubGluZWQgU2V0dGVyIGNh
bGwuCi0gICAgICAgICAgICAgICAgLy8gNC4gKEEpJ3MgSklURGF0YSBpcyBkZXN0cm95ZWQgc2lu
Y2UgaXQgaXMgbm90IGV4ZWN1dGVkLiBUaGVuLCAoQSkgYmVjb21lcyBMTEludC4KLSAgICAgICAg
ICAgICAgICAvLyA1LiBUaGUgQ29kZUJsb2NrIGlubGluaW5nIChBKSBnZXRzIE9TUiBleGl0LiBT
byAoQSkgaXMgZXhlY3V0ZWQgYW5kIChBKSBldmVudHVhbGx5IGdldHMgQmFzZWxpbmUgQ29kZUJs
b2NrIGFnYWluLgotICAgICAgICAgICAgICAgIC8vIDYuIChCKSBnZXRzIE9TUiBleGl0LiAoQikg
YXR0ZW1wdHMgdG8gc2VhcmNoIGZvciBTdHJ1Y3R1cmVTdHViSW5mbyBpbiAoQSkgZm9yIFB1dEJ5
SWQgKG9yaWdpbmFsbHksIHB1dF9ieV92YWwpLiBCdXQgaXQgZG9lcyBub3QgZXhpc3Qgc2luY2Ug
KEEpJ3MgSklURGF0YSBpcyBjbGVhcmVkIG9uY2UuCi0gICAgICAgICAgICAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZEJ5VmFsSW5mbyhD
b2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYnlWYWxJbmZvKTsKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gYnlWYWxJbmZv
LT5kb25lVGFyZ2V0LnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9y
aWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1
YkluZm8pOwogICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24u
cmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCmluZGV4
IDY2NzgzNTU1ZGYyMTZkMThmOTBjNTk1NDZlYzc5MmQ1MGQ4ZmQ1OGEuLjFmNDE4MzE4YTRjMGRl
YzZkMmU5OWQ0MDlmNzFkYWZhNDY5N2IyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcApA
QCAtMTI1OCw3ICsxMjU4LDcgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC0y
NTU0LDE1ICsyNTU0LDEzIEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRob3NlIG5v
ZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMgbWVh
bnMgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgY2Fu
IHNpbXBseSB0cnVzdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJl
IHVzaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZh
cmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVudFNldCwg
Y3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9mZnNldCA9
IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuY2xlYXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmFkZChz
dHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojpy
ZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRT
ZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJu
IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTI2MTUsNyArMjYxMyw3IEBAIGNsYXNzIE9iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAppbmRleCAxNjIyZGQ4YjFiNTIxY2M0MWRmYTg1YWI1MzI2MmVjZTgwZmU3NGYyLi44OWU1ZWY0
ZDg1MWVjOTBkNmQ5ODU1Y2E0N2NhNWJjNzgyNTcyZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAgY2xhc3MgUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIFdlYWtNYXBTZXQ6CiAgICAgICAgIGNhc2Ug
RmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0g
ICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApp
bmRleCAxZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwLi5kNTQ5NjQ0NTBi
NjMyMjc0ODk4ZDY4YzhhOWJlOWY3YTc2Zjk4MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgYm9vbCBpZ25vCiAgICAgICAgIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0MWNm
ZDFlOWE1OGRkYzQyNS4uNWRhMDQzODdiNmQwZWU4OTg3NDhjMjllYzc3ODY0ZmJjOTFlYjBmMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
IGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCmluZGV4IDg4MDhiMTBjODI2YzUxMDY5Nzk3NDAwOWU5NmYxOTlmYThmMTBh
NGMuLmM4ZmMxNTc0MTU5ZDQ0NmNkZWM4OWU4N2NkNzE4ZDMwYTUyMDE2OWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtNTg3
MSw3ICs1ODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDU0MTBkOTA4OTZkYzRm
MDEwNTc5MzBkZjgyZjY2MTkyYjgxZjZjMGYuLmM1ZTVjZjM2YTc3MGQxNTgzYjY5M2RmZDg4MWQ2
NDI0YWIxN2JjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CkBAIC0zMTIsOCArMzEyLDggQEAgY2xhc3MgVmFsaWRhdGUgewogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
IT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIXZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRjaCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggZmRhNjRkMzVkYTM0Mjg4OWM3
OThjMDUxZTk1NzZlOGExZTMzYTM5Yi4uZjFhMzgwOWQ3ZWZlMzBmOGQ1OWJhMjFmYWNkMDcwOWU0
MzhiOTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgY2xhc3MgVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAg
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgpAQCAtNDIxLDcgKzQyMSw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYXNlIEZp
bHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDAzZjg2NTJjNmNiODJjNjIwMjBk
MWU2NmJiNTlmNDY1OTFkODNlNGMuLjgzYjUxYmE5Y2Y3NjVkYTA0NjM3M2E3OWIxY2EwMzMwYzQz
YzdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGIwMDFkMTMyZjAyZmZjMzgyNTNjMzhkZjJl
NDliMGNmMzZlNjJmNjYuLmE1NDM4MDk2NTgwZTQyZjc1MTU0NmQzNTliY2IwNDExZGZkNDg2MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTE2NDksNyArMTY0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC04OTUxLDcgKzg5NTEsNyBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSk7CiAgICAgICAgICAgICAgICAgYmFzZVNldC5h
ZGQoc3RydWN0dXJlKTsKQEAgLTg5NjYsMTYgKzg5NjYsMTYgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZh
cmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAg
ICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAKICAgICAg
ICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJp
YW50LmtpbmQoKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5k
KCkpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6
aWx5KAogICAgICAgICAgICAgICAgICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3du
ZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtODk4Nyw3ICs4OTg3LDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9wZXJ0
eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9PSB2YXJp
YW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlubGlu
ZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RT
TC5yYgppbmRleCA2OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4Li43OGZk
NDk0M2Y5ZWNiYzRjMzVjN2NkY2IzMmI3Mzc3Y2FiOWYxZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTQxLDcgKzE0MSw3IEBAIGRlZiBzZWxmLndyaXRlX2J5
dGVjb2RlX3N0cnVjdHMoYnl0ZWNvZGVfbGlzdCwgYnl0ZWNvZGVfc3RydWN0c19maWxlbmFtZSkK
ICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUu
aCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0
YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdz
LmgiCiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDBiNGMyYjliZTBmNWZmZjE1MWEzYjA3ZTlhYTI0
ZmNjZjkwNTAzOTguLjQxMTg2ZGJlOTQyMDk2MjcwMGE1Yjk3NjkxM2ZmMGE3YjI0YjdhYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTM1Nyw3
ICsxMzU3LDggQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1ibGVy
IHsKICAgICB9CiAgICAgdm9pZCB1bmJveERvdWJsZShHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5
bG9hZEdQUiwgRlBSUmVnIGZwciwgRlBSUmVnIHNjcmF0Y2hGUFIpCiAgICAgewotICAgICAgICBt
b3ZlSW50c1RvRG91YmxlKHBheWxvYWRHUFIsIHRhZ0dQUiwgZnByLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2hGUFIpOworICAgICAgICBtb3ZlSW50c1RvRG91Ymxl
KHBheWxvYWRHUFIsIHRhZ0dQUiwgZnByKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBib3hEb3Vi
bGUoRlBSUmVnIGZwciwgSlNWYWx1ZVJlZ3MgcmVncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0
YXRzLmgKaW5kZXggZjA0YzFmNDI4ZTEwYmZjNzFmYTVjZTM1ZTAwMjg2OGJiNzhhZGVmNi4uOTFi
M2IzMTU1MTBkYTY4MjRiM2M5NjM0MTBlMzM2ZDk1ODlhYmM3YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9JQ1N0YXRzLmgKQEAgLTY3LDEwICs2NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KSBcCiAgICAgbWFjcm8oT3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKICAg
ICBtYWNybyhPcGVyYXRpb25QdXRCeUlkUHV0UHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6
ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRBZGRBY2Nlc3NDYXNlKSBcCi0gICAgbWFjcm8oUHV0QnlJ
ZFJlcGxhY2VXaXRoSnVtcCkgXAotICAgIG1hY3JvKFB1dEJ5SWRTZWxmUGF0Y2gpIFwKLSAgICBt
YWNybyhJbkJ5SWRTZWxmUGF0Y2gpIFwKKyAgICBtYWNybyhQdXRCeUFkZEFjY2Vzc0Nhc2UpIFwK
KyAgICBtYWNybyhQdXRCeVJlcGxhY2VXaXRoSnVtcCkgXAorICAgIG1hY3JvKFB1dEJ5U2VsZlBh
dGNoKSBcCisgICAgbWFjcm8oSW5CeVNlbGZQYXRjaCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFj
ZVdpdGhKdW1wKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMpIFwKICAgICBt
YWNybyhPcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKaW5kZXggYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThlZmE0NzEzMi4u
NTBkZTg1NWI2YWM5MGVlNmQzZDFjOTYxZTQ0ODQ4MjM5NWE0NjE2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcApAQCAtNTEwLDYgKzUxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgbV9nZXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2dldEJ5SWRXaXRo
VGhpc0luZGV4ID0gMDsKICAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRCeVZhbElu
ZGV4ID0gMDsKICAgICBtX2luQnlJZEluZGV4ID0gMDsKICAgICBtX2luQnlWYWxJbmRleCA9IDA7
CiAgICAgbV9kZWxCeUlkSW5kZXggPSAwOwpAQCAtNjYyLDYgKzY2Myw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkSW5k
ZXggPT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZFdp
dGhUaGlzSW5kZXggPT0gbV9nZXRCeUlkc1dpdGhUaGlzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcHV0QnlWYWxJbmRleCA9PSBtX3B1dEJ5VmFscy5zaXplKCkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKG1faW5CeUlkSW5kZXggPT0gbV9pbkJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9pbnN0YW5jZU9mSW5kZXggPT0gbV9pbnN0YW5jZU9mcy5zaXplKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPT0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtOTA5LDYgKzkxMSw3IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwog
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKKyAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5k
ZXggNjQ0MGZmMjQxMGYwMzcyZDFiNWZiN2YwNTc3ZmQ3MGY0OWUyMDU1OC4uMjZhZmZkYTU3YzQw
OTViNDkxYWJiNTQxZjI2MjdiMWJmMGE2MWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBA
IC0yMjUsMjggKzIyNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJh
eU1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxl
RGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRl
Y29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTI2OCwxMCArMjQ2LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFs
SW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRl
bnRpZmllcik7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIENhY2hlYWJsZUlkZW50aWZp
ZXIpOwogCkBAIC0zODQsMzYgKzM1OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVy
SUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9p
ZCBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsK
LSAgICAgICAgCi0gICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9m
aWxlKik7Ci0gICAgICAgIAotICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBp
cyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KLSAgICAgICAgLy8gVGhl
IHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tl
ZCBhbmQKLSAgICAgICAgLy8gemVyby1leHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0
cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLgotICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93
IGNhc2VzLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3Qg
ZW1pdEludDMyUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdl
bmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgSW50
MzJTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXREb3VibGVQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwg
YnlWYWxJbmZvLCBEb3VibGVTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRHZW5lcmljQ29udGlndW91c1B1
dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3As
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyopOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChP
cCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0
VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8q
LCBUeXBlZEFycmF5VHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTEwNjQsNiArMTAwOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8SklUR2V0QnlWYWxHZW5lcmF0b3I+IG1fZ2V0QnlWYWxz
OwogICAgICAgICBWZWN0b3I8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiBtX2dldEJ5SWRz
V2l0aFRoaXM7CiAgICAgICAgIFZlY3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRz
OworICAgICAgICBWZWN0b3I8SklUUHV0QnlWYWxHZW5lcmF0b3I+IG1fcHV0QnlWYWxzOwogICAg
ICAgICBWZWN0b3I8SklUSW5CeUlkR2VuZXJhdG9yPiBtX2luQnlJZHM7CiAgICAgICAgIFZlY3Rv
cjxKSVRJbkJ5VmFsR2VuZXJhdG9yPiBtX2luQnlWYWxzOwogICAgICAgICBWZWN0b3I8SklURGVs
QnlJZEdlbmVyYXRvcj4gbV9kZWxCeUlkczsKQEAgLTEwOTEsNiArMTAzNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9Owog
ICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRXaXRoVGhpc0luZGV4IHsgVUlOVF9NQVggfTsKICAg
ICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXggeyBVSU5UX01BWCB9OworICAgICAgICB1bnNp
Z25lZCBtX3B1dEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2lu
QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5VmFsSW5kZXgg
eyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2RlbEJ5VmFsSW5kZXggeyBVSU5UX01B
WCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAppbmRleCA2OWJmMWExYzNmOGExYTM5MTY5YzZkMzk5YzJiMGM2NzZjODhj
ZjY0Li5hOTBjODY5ZDM5Nzk5NzZjNmZmYTZlZGQyM2ZjMzI2MzQ0MmY1OWYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cApAQCAtMTQyLDcgKzE0Miw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRj
aCwgCiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICAgICAgOiBK
SVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IEFjY2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BS
KQorICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlJZCwgdXNlZFJlZ2lzdGVycywgYmFzZSwg
dmFsdWUsIHN0dWJJbmZvR1BSKQogICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAg
ICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCiB7CkBAIC0zODEsNiArMzgxLDY3IEBAIHZvaWQgSklU
R2V0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVm
ZmVyJiBzbG93UGF0aCkKICAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uOwogfQogCitKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklU
UHV0QnlWYWxHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BS
UmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQorICAg
IDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFj
Y2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCisgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQorICAg
ICwgbV9wdXRLaW5kKHB1dEtpbmQpCisgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAsIG1fdmFsdWUo
dmFsdWUpCit7CisgICAgbV9zdHViSW5mby0+aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CisKKyAgICBtX3N0dWJJbmZvLT5iYXNlR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAgbV9z
dHViSW5mby0+cmVncy5wcm9wZXJ0eUdQUiA9IHByb3BlcnR5LnBheWxvYWRHUFIoKTsKKyAgICBt
X3N0dWJJbmZvLT52YWx1ZUdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSID0gc3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBtX3N0dWJJbmZvLT5iYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZv
LT52YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8tPnYucHJvcGVy
dHlUYWdHUFIgPSBwcm9wZXJ0eS50YWdHUFIoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit7Cisg
ICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOworICAgICAgICBqaXQuY2Fs
bChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7
CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKK3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0
b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkK
K3sKKyAgICBCYXNlOjpmaW5hbGl6ZShmYXN0UGF0aCwgc2xvd1BhdGgsIGZhc3RQYXRoLmxvY2F0
aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3RhcnQpKTsKKyAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpCisgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1f
c3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK30KKworVl9KSVRPcGVyYXRpb25fR1Nz
aUpKQyBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbigpCit7CisgICAgc3dp
dGNoIChtX3B1dEtpbmQpIHsKKyAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
aWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgIGlmICht
X2VjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lOgorICAgICAgICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgQVNT
RVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIC8vIE1ha2Ugd2lu
IHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCiBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6
OkpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
VHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgYnJhbmQsIEdQUlJlZyBzdHVi
SW5mb0dQUikKICAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4IGVlNjgx
NDEwMWE4MWViZDE1NWJmNGRiNjkzZmY0N2M4YTI3OGY3ZmIuLjMwNWI3MGQzZjkyYjFmZTNiNWE2
NjdkYjMzNDRiYjY2N2Q2ZmI0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKQEAgLTEyOSw5ICsxMjksNyBAQCBjbGFzcyBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRv
ciB7CiAKIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdl
bmVyYXRvciB7CiBwdWJsaWM6Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvcigpCi0gICAgICAgIDog
bV9lY21hTW9kZShFQ01BTW9kZTo6c3RyaWN0KCkpCi0gICAgeyB9CisgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLApAQCAtMTQyLDEwICsxNDAsNDIgQEAgY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKICAgICBWX0pJVE9wZXJhdGlvbl9HU3Np
SkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKLSAgICBFQ01BTW9kZSBtX2VjbWFN
b2RlOworICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKICAg
ICBQdXRLaW5kIG1fcHV0S2luZDsKIH07CiAKK2NsYXNzIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKKyAgICB1c2luZyBCYXNlID0g
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CitwdWJsaWM6CisgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigKKyAgICAgICAgQ29k
ZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgRUNNQU1vZGUsIFB1dEtpbmQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd1BhdGhKdW1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3dQYXRoSnVt
cC5tX2p1bXAuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3Nsb3dQYXRoSnVtcC5tX2p1bXA7
CisgICAgfQorCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZm
ZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CisKKyAgICB2b2lkIGdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKworICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMg
c2xvd1BhdGhGdW5jdGlvbigpOworCitwcml2YXRlOgorICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUg
eyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKKyAgICBQdXRLaW5kIG1fcHV0S2luZDsKKworICAgIEpT
VmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworCisgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7Cit9OworCiBjbGFzcyBKSVREZWxCeVZhbEdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiAgICAgdXNpbmcgQmFzZSA9IEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAppbmRleCA3NzQ0YjUwODM3YWVhN2JhMDg1YTAxMzQ1ZmJiZjJiNjhiZjBkNDI1
Li43N2FmNWIxMzNmNDVmYjExZDQwNWIzNjk5MmJlMGM3MjgwNjRhMDM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMzY0LDI0ICszNjQsNiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlubGluZSBKSVRBcnJheU1vZGUgSklUOjpj
aG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIGF1dG8gYXJyYXlQ
cm9maWxlU2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhpbmdUeXBlIGNhcGFi
aWxpdHkpIHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFy
cmF5cyhhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAgICB9OwotCi0gICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBh
cnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7Ci0gICAgaWYg
KGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVy
biBKSVREb3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNo
YXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXco
YXJyYXlNb2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlT
dG9yYWdlOwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCiBBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDI0ZDlmNWVkZjg3MTU4
MzhkNzc1YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2MzI4MWUzNWRmZTU1ZmFlMjA2MTAwYTE1
ZGE5NzE5YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCkBAIC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIs
IHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRp
Zmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVj
dCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkK
QEAgLTc1MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplYwogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNs
b3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmll
ciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7
CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkK
QEAgLTc4Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYgogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBz
bG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVy
LCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0K
IAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpA
QCAtODEzLDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNs
b3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIs
IHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmllbGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4
ODgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERlZmluZVBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAogICAgICAgICBBU1NFUlRfVU5VU0VEKGFj
Y2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8t
PmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5
KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICBy
ZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3Ry
dWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZSk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xv
dCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZERlZmluZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwxNiArOTI0LDE1IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emUsIHZvaWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlw
ZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAg
ICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xk
U3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIs
IHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAg
ICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2lu
ZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKICAgICB9KTsKIH0KIAot
c3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJz
Y3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9k
ZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBp
ID0gKmluZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0
MSw4IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0
T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAg
ICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5k
ZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiArOTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZVZhbHVlLnB1
dEJ5SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAg
ICAgICAgIHJldHVybjsKLSAgICB9IAorICAgIH0KKwogICAgIGlmIChzdWJzY3JpcHQuaXNOdW1i
ZXIoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQ
cm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAg
Ly8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24u
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGlmIChieVZh
bEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVu
dGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0gcHJv
cGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21h
TW9kZS5pc1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwg
cHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFs
dWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1v
ZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpT
VmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9k
ZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IG1heWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaW5k
ZXggPSAqbWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5n
VHlwZSgpKSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91
bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFy
cmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKLSAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7
CiAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgu
dmFsdWUoKSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBQdXREaXJlY3RJbmRleFNo
b3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlk
ZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbElu
Zm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIENvbW1vblNs
b3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3Qs
IHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIzLDIyNiArMTAxOCwyMDYgQEAgZW51bSBj
bGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdpdmVVcCwKIH07CiAKLXN0YXRpYyBPcHRp
bWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQg
cHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVl
IHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmls
ZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Ci0K
LSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6
YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RP
cHRpbWl6ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09i
amVjdCgpICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5pbmRleGluZ01v
ZGUoKSkpCi0gICAgICAgIHJldHVybiBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLQotICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotCi0gICAgICAgIEFT
U0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAg
ICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLQotICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09w
dGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0
byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJh
eU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1v
ZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlN
b2RlKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3Qg
PSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9i
amVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCwgZWNt
YU1vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFp
bGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRl
eGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlm
IChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYg
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICAg
ICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vi
c2NyaXB0KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQu
aXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgp
KTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBDYWNoZWFibGVJZGVudGlmaWVy
Ojppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgY29uc3Qg
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxP
YmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5i
eXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2Vl
bikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHBy
b3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0
aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQ
dXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0SW5saW5l
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgICAg
IGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nl
c3NUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRp
ZmllcikpCisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5m
bywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0
aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGlt
aXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAg
IC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNo
aW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtl
IGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAg
ICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9y
dHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIHB1dF9ieV92YWwg
bWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAg
ICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+
c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQotICAgIHJldHVybiBvcHRpbWl6YXRp
b25SZXN1bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxP
YmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsK
IH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9k
ZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0
aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLXN0YXRp
YyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxl
KSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQg
YWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZh
bHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwot
ICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFz
T2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmpl
Y3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0
cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERpcmVjdChh
cnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgeworICAgIGlm
ICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0
LmlzSW50MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3Qt
PnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2Vu
ZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZSkgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAg
ICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2Rl
QmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsK
KyAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBh
dGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIH0K
KyAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNv
bWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdh
aXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0
aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBl
SW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlv
blJlc3VsdDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXND
YWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5
KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVj
b2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVy
dHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgUHV0S2luZDo6RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAg
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
U2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
Y29kZUJsb2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCBlY21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwor
CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3Jp
Z2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBDb21t
b25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFz
Q2VsbCgpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXBh
dGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBp
ZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6OkRp
cmVjdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
b3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9w
dGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAg
ICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBh
dGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0
YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcK
LSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9w
cG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIGdldF9ieV92
YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYK
LSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5m
by0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9
IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgc3Vic2Ny
aXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIAotICAgIHJldHVybiBvcHRpbWl6YXRp
b25SZXN1bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
RUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwot
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25S
ZXN1bHQgcmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcCkgewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FE
RFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KIAotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmpl
Y3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBkaXJlY3RQ
dXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2Rl
IGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAg
ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFN
b2RlOjpzbG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmls
ZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAg
ICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9i
amVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xv
cHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpOwotICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVl
KSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisKKyAgICBzdHViSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1v
ZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1
ZS5pc09iamVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisg
ICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJz
Y3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCiBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCcmFuZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4
IDI1ODRlOTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgxZDVmMTk5OTguLmVmYmQ4ODczNTQyZmMz
ZjRiZTgzZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywxNSBAQCBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZQogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1l
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQp
KTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7Ci1K
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFs
SW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOworCitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwog
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRUNNQU1vZGUpKTsKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwg
KENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA2NzUxNGVi
NjJmYTkyMmIwM2FiNjA2MzRhYWE2ZTI3NzE2NjgzZmM0Li4wMGU3Njg0NzlkNzA1MjFlM2VlMjNl
YzRmNThhNjJkMDQ0NGQ0ZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3NyArNDM4LDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29k
ZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBP
cFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJ
bmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBi
b29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKLSAgICAg
ICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOwot
ICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0g
ICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0
byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFi
c29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdElu
dChyZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4
dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQogICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwogCi0gICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXli
ZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7
Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
Q29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChi
eXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAor
ICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzKSwgcmVnVDIsIGVjbWFNb2RlLCBw
dXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRl
eCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICAg
ICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBU
YXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBl
LmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLQotICAgIAotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIp
OwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAg
IExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJ
bnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVn
VDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGlt
ZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAg
ICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMyk7Ci0gICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1
bXAoKTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRh
Z1JlZ2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1Qw
KTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAg
ICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Ynl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIG91dE9mQm91bmRzLmxpbmsodGhp
cyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7
Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmls
ZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOwotICAg
IHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
ICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7
Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVtcChB
YnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0g
YnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRo
aXMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9y
ZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJl
c3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAg
IGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0KLSAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW5kLmxpbmso
dGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisg
ICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVm
ZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYxLDEy
ICs1MTUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFN
b2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51
bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1v
ZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc0LDE2ICs1
MzEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFs
c1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5
VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC02OTQsMjggKzU0OSwyNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJ
bmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBi
eVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBl
Y21hTW9kZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOwor
ICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93
UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTczNiwxOCArNTg5LDE4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBh
cmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIx
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BS
NTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwg
YnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwog
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVz
cyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVy
YXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRy
VGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsKIApAQCAtODA5LDEzICs2NjIsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1
dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUxLDE0ICs3MDQsMTQgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFy
Z3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFs
SW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIg
PSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihn
bG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZv
R1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkw
LDgyICszMTQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3Rl
cklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5r
Rm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAg
IGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5
dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRE
b3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91
czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51
bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlw
ZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJh
eSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWlu
dDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZh
bEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywg
YnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBi
eVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIp
IHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2Fs
bGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxz
Lmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1
dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAg
IkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkp
OwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0
X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAg
IH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
YzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlW
YWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNz
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJu
QWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0g
ICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0
cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0
aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
LXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJl
Y3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQ
dHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVO
YW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDcsMjIz
ICszMTg0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
UHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYm
IE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1
dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVD
YXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFt
X2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhj
ZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0
ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNh
bGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBt
X2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQot
ICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJ
bmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJCYXNl
bGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9k
aXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5n
KCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0g
ICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZv
LT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAg
YnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
YzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlW
YWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVz
c1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1dEtp
bmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25z
dW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAot
Ly8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2
YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENh
Y2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3Ag
Ynl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBU
eXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwotICAgIAotICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVy
dHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJl
Z2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
MiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSBy
ZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJ
RCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAg
ICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAg
ZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0
aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFy
cmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1p
dEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNj
cmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0
Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0
Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCkp
OwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFz
ZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhw
ZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0g
ICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2Ny
YXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBpZiAo
aXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAx
KTsKLSAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKLSAgICAgICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1t
MzIoMHhmZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBl
YXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIHhvcjMyKGVhcmx5U2Ny
YXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOwotICAg
ICAgICB0b29CaWcubGluayh0aGlzKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhmZiks
IGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQubGluayh0aGlzKTsKLSAgICAgICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0
eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUlu
ZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVT
Y3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0
OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBw
cm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJy
YXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2gg
PSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQg
ZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1Qx
OwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZh
bEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFs
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkp
KTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFk
VHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0Nv
cnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0z
Mih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gy
KTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2Ny
YXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2Zp
bGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5v
dEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3Jh
dGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2Uu
bGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKGVhcmx5
U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwot
ICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGlu
ayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNj
cmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0
Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0g
ICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0
Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxKTsKLSAgICByZWFkeS5saW5rKHRoaXMp
OwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFz
ZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhw
ZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0g
ICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2Ny
YXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBjb252ZXJ0RG91
YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1Qw
LCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5k
ZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBz
bG93Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCmluZGV4IDc1ZDBiZDdmNmVmMzVjNzYyNzMxM2YyNmJhNjVhMTY4ZDgzYjk0NTYu
LmI5OGJmZWNlZGFhNTU2MDFmOTVhODhiZWRhNjFiMDlmMWEzNDM0NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAt
NTQ1LDcgKzU0NSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkCiAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAo
KTsKICAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUo
cmVnVDAsIHJlZ1QxLCBmcFJlZ1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgbW92ZUludHNUb0RvdWJs
ZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTmFOKGZwUmVnVDApKTsKICAgICAgICAgcmVhZHkubGluayh0aGlzKTsKICAgICAgICAgc3Rv
cmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggMzdhODBiMjk1NzcyMTBmMzVl
MDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5OTAzMTNjYTRhYjc5ZDE5NDNmOGM4
MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC01NjgsNTMg
KzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwogICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7CiB9
CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlT
bG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAg
c3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0Owot
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICBzd2l0Y2ggKHB1dEJ5S2lu
ZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2lu
ZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgewor
ICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4g
cG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0
S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkK
K3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemlu
Z1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBw
dXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAg
ICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0g
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VS
VChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6
CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERp
cmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgc3dpdGNoIChwdXRL
aW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAg
Ly8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC02
ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
T3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIs
IGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgsMTIgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExPR19JQygoSUNF
dmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xv
dC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHko
KSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0
QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQ
dXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1LDEyICs4NzYsMTA2IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaFB1dEJ5
SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0g
ICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZh
bHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2lu
ZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUu
aXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRl
eC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1
bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKKworICAgICAgICBKU0Nl
bGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJ
bmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChi
YXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9h
dDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMK
KyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBU
eXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5n
U2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
SWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2Rl
KCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZv
LCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3co
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEFy
cmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIGlmICh0
cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4
LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RH
ZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBl
Y21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKyAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsK
QEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW4KICAgICB9CiB9
CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgdXNpbmcg
RnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJl
dF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJ
bmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlvblR5cGUgb3B0aW1pemVkRnVu
Y3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rp
b25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7
CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
bykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1p
emVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2Fs
bFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KIAogICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cisg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKKyAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgcmVz
ZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKaW5kZXggYzE5
ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhlNi4uZWNlMzc3ZWUxMGEyZWY4NGEy
M2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgK
QEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlLaW5kIHsKICAgICBQcml2YXRlTmFt
ZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZh
bCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAgICBCeUlkLAogICAgIEJ5VmFsCkBA
IC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQgewogCiB2b2lkIHJlcGF0Y2hBcnJh
eUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1Zh
bHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25z
dCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJl
cGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0
dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNH
bG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9k
ZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVwYXRjaEhhc1ByaXZh
dGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7CkBAIC02OSw3
ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2
b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJp
YW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3YjE1Mjk2OTEwZDVlMGE4NzE1NWFj
NWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMwNmJjNDcxMmM1OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaApA
QCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaXMg
YSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMuIFRoaXMgaXMgbmVlZGVkCi0vLyBi
ZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeUlk
U3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1
cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNoIHJlZmVycyB0byB0aGUgb3Bjb2Rl
cyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRoICJsbGludF8iLgogLy8gSW4gdGhl
IENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1aXZhbGVudC4gSGVuY2UsIHdlIHNl
dCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435856</attachid>
            <date>2021-08-19 01:48:42 -0700</date>
            <delta_ts>2021-08-20 18:15:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210819014841.patch</filename>
            <type>text/plain</type>
            <size>290484</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MWQ3NDhiYjE0NDkwZTRiYWJlYjliM2UyMWRiMmEwZjA4NGRmYzZhLi5jNGQyMjA5YjhlZDc3YTIy
N2FjY2U4ZWE2OWZlMWU4ZjRlNDVhMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTAgQEAKKzIwMjEtMDgtMTkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlSW50
c1RvRG91YmxlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgor
ICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVy
cy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnVuYm94RG91YmxlKToKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rp
b24pOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAq
IGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGlt
aXplKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChK
U0M6OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJl
Y3RQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWND
b250aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpT
Qzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVQdXRCeSk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRC
eSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OnJlcGF0Y2hQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlE
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuaDoKKwogMjAyMS0wOC0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBvcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eSByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQxY2Iz
MjZiZTcwNWQ3MzM5MWQxNWVmNDdlNzRhOTk0ZmMxODk4Yy4uZWIwYzFjODRiYTBmZDY3MDRmM2Yx
OGNiZDgzZmZjODU5MGI0M2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2
NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
Mjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkz
MzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBH
ZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0
YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2
IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTNCNEFBMThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VL
ZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUy
QUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUg
LyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5
IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTI4NjcsMTEgKzI4NjcsMTEgQEAKIAkJMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMz
Mjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOUExNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5OTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRW
YXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVZhcmlhbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0
UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdFJh
Y2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFBMDFERjc4NjA3
MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFC
QTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODY5OCwxMCArODY5OCwxMCBAQAogCQkJCTBGRDNFNDA4MUI2
MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGMTVDRDIwMUJB
NUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwICovLAogCQkJCTBGMTVDRDIxMUJBNUY5
ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4
NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFu
dC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5o
ICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJ
MEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuY3BwICovLAogCQkJ
CTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8sCkBAIC0x
MDUxMCw4ICsxMDUxMCw4IEBACiAJCQkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5
UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyog
UHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8q
IFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MzMyQTQxNENBN0REOTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTNCNEFBMThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzMy
QTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0
NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uNzA3N2VmOWFlMzExNzZmNjM4
NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAt
MjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCiBi
eXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAotYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKK2J5dGVj
b2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRl
Y29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTXY3LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNdjcuaAppbmRleCBkZjg4Mzg2YTgzMjNkODY5MTJjZmU1MzUzMWUzYTgyZGZiNDRl
YjhlLi45MTE3YmI4NDRjNjA3ZWI1ZTUyMzNmYjM4YTQ1MjI0YjQ2NzM2NDc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
aApAQCAtMTAwMSw5ICsxMDAxLDggQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk12NyA6IHB1Ymxp
YyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogICAgICAgICBtX2Fzc2VtYmxl
ci52bW92KGRlc3QxLCBkZXN0Miwgc3JjKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBtb3ZlSW50
c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQg
ZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgdm9pZCBtb3ZlSW50c1RvRG91YmxlKFJl
Z2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKICAgICAgICAgbV9hc3NlbWJsZXIudm1v
dihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCmluZGV4IDE0NDVjNzkxYjI4Y2Vm
NWRmYzE1NmMzMTI0YzZhNGUyMjIxYWMxYTQuLjc0ZDEyNzYyNWE3N2I1MTE2OWJhZGY5YWQzNWM3
ZTg1YjM1MzlhNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJNSVBTLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlck1JUFMuaApAQCAtMjA3Miw5ICsyMDcyLDggQEAgY2xhc3MgTWFjcm9B
c3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7
CiAgICAgICAgIG1fYXNzZW1ibGVyLnZtb3YoZGVzdDEsIGRlc3QyLCBzcmMpOwogICAgIH0KIAot
ICAgIHZvaWQgbW92ZUludHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3Jj
MiwgRlBSZWdpc3RlcklEIGRlc3QsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHZvaWQgbW92
ZUludHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnZtb3YoZGVzdCwgc3JjMSwgc3JjMik7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKaW5kZXgg
OGQwMjJlM2I4MjVmNThkMmVmNDg4MjFiMWMyYTk0MjU2OTFkMWI0OS4uYTY2OTk1OTcwNTUwYTlh
YjUxY2QyNmQ0OTE5NTY2OGYzYjBjOTRhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaApAQCAtMTgzLDE0ICsxODMsNiBAQCBj
bGFzcyBNYWNyb0Fzc2VtYmxlclg4NiA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiB7
CiAgICAgICAgIG1vdmVGbG9hdFRvMzIoc3JjLCBkZXN0MSk7CiAgICAgfQogCi0gICAgdm9pZCBt
b3ZlSW50c1RvRG91YmxlKFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBGUFJlZ2lz
dGVySUQgZGVzdCwgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCi0gICAgewotICAgICAgICBtb3ZlMzJU
b0Zsb2F0KHNyYzEsIGRlc3QpOwotICAgICAgICBtb3ZlMzJUb0Zsb2F0KHNyYzIsIHNjcmF0Y2gp
OwotICAgICAgICBsc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7Ci0gICAg
ICAgIG9yUGFja2VkKHNjcmF0Y2gsIGRlc3QpOwotICAgIH0KLQogICAgIEp1bXAgYnJhbmNoQWRk
MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pbShpbW0ubV92YWx1ZSwg
ZGVzdC5tX3B0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAKaW5kZXggZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uZGVj
NGRmMWQ1OWEwNDk0NjUyYjExMzFjYWIzMTIwYWNjNWQ5ZmZiYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVm
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUgdHlwZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxv
YWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29u
c3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6Cisg
ICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAg
Ym9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNl
IEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6
CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBj
YXNlIEluZGV4ZWREb3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9y
RWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBj
YXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3Jh
Z2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpA
QCAtNTY5LDYgKzY0NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZl
Y3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1w
ZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBl
KCk7CiAKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2Fk
OChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBpc0VtcHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpA
QCAtMTIyNywxNiArMTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJk
KAogICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKIAogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVl
KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVl
UmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1w
dHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BS
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZh
bHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9
IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25v
cmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBq
aXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAg
IGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0x
MjYyLDIxICsxMzYzLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAg
ICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BS
KTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJS
ZWcpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBz
dGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElm
TmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAg
aml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFs
dWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAg
ICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQ
UikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAg
ICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAg
ICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRj
aDNHUFIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFs
dWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4NywyNjcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0
YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWls
QW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0
KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFp
bEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAg
ICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlh
cyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25l
IGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKENvcHlPbldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
dmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdz
KCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7Cisg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworI2VuZGlmCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJl
c2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGU7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBmYWlsQW5kSWdub3JlOworICAgICAgICBhdXRvIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
ID0gWyZdIHsKKyAgICAgICAgICAgIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgICAgIH07CisKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBzdG9yZVJlc3VsdDsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRl
eGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3Jh
dGNoMkdQUik7CisKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoVGVzdDY0
KENDYWxsSGVscGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSkpOworCisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOwor
ICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJ
bmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90
eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAg
ICAgIGV4cGVjdGVkU2hhcGUgPSBJbnQzMlNoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRTaGFwZSA9IERvdWJsZVNoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVj
dGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkp
KTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaXNPdXRPZkJvdW5k
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNo
RlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgICAgIGF1dG8gbm90SW50ID0gaml0
LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7
CisgICAgICAgICAgICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAg
ICAgbm90SW50LmxpbmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUo
c2NyYXRjaDJHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CisjZWxzZQor
ICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZUludHNU
b0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRl
LnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgcmVhZHkubGluaygmaml0KTsK
KworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoc3RhdGUuc2NyYXRj
aEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgICAg
ICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIo
dmFsdWVSZWdzKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAg
ICAgIC8vIFdyaXRlQmFycmllciBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGVtYmVkZGVyIHNpZGUu
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlKSB7CiAgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7Ci0gICAg
ICAgICAgICBpc0VtcHR5LmxpbmsoJmppdCk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmls
ZQorICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Om51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworCisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgJmppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc091dE9mQm91
bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAgICAgICAgICAgIC8vIGVtaXRB
cnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgICAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsK
KworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
ICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
bGluaygmaml0KTsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVBy
b3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJl
c3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKworICAgICAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9UeXBlZEFycmF5VHlwZShtX3R5cGUpOworCisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CisKKyAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSkpOworCisgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQu
YnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0
ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVD
YXNlID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNo
RlBSKTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAg
ZG91YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
ciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQu
bW92ZTY0VG9Eb3VibGUoc2NyYXRjaEdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisjZWxzZQorICAg
ICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7
CisjZW5kaWYKKyAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAgICAgIH0KKworICAg
ICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5m
YWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9j
ayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJl
Z3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBl
KSkKKyAgICAgICAgICAgIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUg
cHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFj
a1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSks
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGZh
bHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocHJvcGVydHlHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChpc0Ns
YW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkg
PT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKKyAg
ICAgICAgICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoM0dQ
Uik7CisgICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkJlbG93T3JFcXVhbCwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRvb0JpZyA9IGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuLCBzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGppdC54b3IzMihzY3JhdGNoM0dQUiwg
c2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gY2xhbXBlZCA9IGppdC5qdW1wKCk7
CisgICAgICAgICAgICAgICAgdG9vQmlnLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZiksIHNjcmF0Y2gzR1BSKTsKKyAg
ICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaW5Cb3Vu
ZHMubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHNjcmF0Y2gzR1BSLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzT25lKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMTYodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VGltZXNUd28pKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMih2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQ
Uiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc091dE9mQm91
bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGlzRW1wdHkpOwor
ICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3RhdGUuc2NyYXRjaEZQUiwgc3RhdGUu
c2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc3RhdGUuc2NyYXRj
aEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoc3RhdGUuc2Ny
YXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0
YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE4Myw2ICsyNTM1
LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNh
c2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVja1ByaXZhdGVCcmFuZDoKKyAgICBj
YXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3Jh
Z2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBi
ZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBpcyBwYXJ0
IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBzdXJlIHRoYXQgbm9ib2R5
IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBzaW5jZSB0aGV5CiAgICAg
ICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tzLgpAQCAtMjE5NiwyMiAr
MjU2MSwzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNlOjp0b1R5cGVkQXJyYXlUeXBlKEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6
CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKICAgICAg
ICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJu
IFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWlu
dDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4
NCw2ICsyNjU4LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVTaGFyZWQoY29uc3QgQWNjZXNz
Q2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2Ug
SW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNDE5Yzk5YzkwZjQzOTAxODAxZDRh
OTYyMTEwNTA4OTliYWRmZDliZS4uMTg2NDRhZDUxMGY4MGJiZDk3NTFmODM2NjcwZmY5MGE5MzEw
ODQzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCkBA
IC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxv
YWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQsCiAgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkCisgICAg
ICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRleGVkSW50MzJTdG9yZSwKKyAgICAg
ICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRleGVkQ29udGlndW91c1N0b3JlLAor
ICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFy
cmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUsCisgICAg
ICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUsCisgICAgICAgIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJT
dG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUsCiAgICAgfTsKIAog
ICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdhZDBkZjg4MjExMDdmZTNiODQ5MTdj
NDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcyYjRkYzJhMWQxODkyMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKQEAgLTM2LDcgKzM2
LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBHZXRC
eVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQdXRCeUlkU3RhdHVzOworY2xhc3Mg
UHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IElDU3RhdHVz
IHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBHZXRC
eVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEluQnlTdGF0dXMqIGluU3RhdHVz
IHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsK
KyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIERlbGV0ZUJ5U3Rh
dHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA4MTA0YTJm
MzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40NzEzNTE5ZGJhOTRiMjE0ZmNlNDU3
MTBkNzZiMjEyM2FmZDcwYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTEwMjIsNiArMTAyMiw0NSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0
eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZEludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91
c1N0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmlu
dCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQzOWM3YTRl
YTZlNjFjZjU2NDhhZWZhYzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgi
Ci0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHVz
VXRpbHMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlkU3RhdHVz
OjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewotICAgIHJl
dHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19Ci0KLXZv
aWQgUHV0QnlJZFN0YXR1czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMuc2hyaW5r
VG9GaXQoKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxM
SW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2st
PnZtKCk7Ci0gICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2UgYXJlIG5v
dCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1dF9wcml2
YXRlX25hbWVgLgotICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyBy
ZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElDIGltcGxl
bWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWluc3RydWN0
aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJl
SUQpOwotCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0
cnVjdHVyZUlEOwotICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0
dXJlSUQpOwotICAgIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
LSAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAgIGNvbmRp
dGlvblNldCA9Ci0gICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRl
ck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
Ci0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7
Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBk
aWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17
Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgIAotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgaWYgKGRpZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5n
ZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJZFN0YXR1
cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2Rl
SW5kZXgsIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVOQUJMRShK
SVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOwot
ICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1QdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIs
IGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpKSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCi17Ci0gICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6
c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFpc0lubGlu
ZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1hcnkpOwot
ICAgIAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRv
IGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNl
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7
Ci0gICAgICAgIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0
Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2Um
IGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAgICAg
ICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0g
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vz
c0Nhc2U6OlRyYW5zaXRpb246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkp
OwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0
dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nl
c3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ29tcGxl
eEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZv
cigKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCks
IHVpZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4
R2V0U3RhdHVzLmtpbmQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1
czo6U2hvdWxkU2tpcDoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNT
bG93UGF0aDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5h
czxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZv
cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpj
YWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJ
ZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29t
cGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAgICAg
ICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVT
ZXR0ZXI6Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVy
OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAg
IH0KLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9j
ayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRl
eHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBj
YWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFz
ZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0Jh
ZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAgICBmb3Ig
KElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAgICBJQ1N0
YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAotICAgICAg
ICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5
SWRTdGF0dXMgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdp
bikpIHsKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAs
IGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4
aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnN0dWJJ
bmZvKSB7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGlt
aXplZENvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRl
Rm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1p
emVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChzdGF0dXMucHV0U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMu
cHV0U3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVC
bG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2FsbEV4aXRT
aXRlRGF0YSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBw
cml2YXRlRmllbGRQdXRLaW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQotICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChzZXQuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICBy
ZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2Jh
bE9iamVjdFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIC8vIFdl
IGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVO
YW1lQnlJZGAgZGVmaW5lIG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFy
ZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRh
a2UgCi0gICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgotICAgICAg
ICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAgICAgaWYg
KGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXYXRj
aHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0
Y2hwb2ludFNldChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxh
Y2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4
ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9p
bnQgc2V0LgotICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJv
YmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAgICAgICAg
ICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3
YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAgLy8gSklU
IHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhh
dmUgYSBsYXp5IHRoaW5neS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRo
aXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0
IG1vZGUgYW5kIGl0Ci0gICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWluZyB0byBz
dG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCi0g
ICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4
ZWN1dGVkLgotICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8g
T3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3
ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8g
ZG8gc29tZSBzYW5pdHkgY2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQg
dHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRo
aW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAgICAgIC8v
IHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KLSAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNEaXJlY3Qp
IHsKLSAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKLSAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0g
ICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBh
bHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAg
ICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVy
ZSwgdWlkLCAwLCBvZmZzZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bigKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwg
b2Zmc2V0KSk7Ci0gICAgICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3VsdC5zaHJp
bmtUb0ZpdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQdXRCeUlk
U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1w
bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtl
c0NhbGxzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtl
c0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZh
cmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0
YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQ
dXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRT
dGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogbV92YXJpYW50cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBQdXRCeUlkU3RhdHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhlcikKLXsK
LSAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhpcyA9IFB1
dEJ5SWRTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXND
YWxscyA6IFRha2VzU2xvd1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoIChtX3N0YXRl
KSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBpZiAob3Ro
ZXIubV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6IG90aGVy
Lm1fdmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAgICAgIHNo
cmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Ns
b3dQYXRoOgotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygp
OwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIFB1dEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKLXsKLSAg
ICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0ZXJJQ1N0
YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVw
bGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQotICAgICAg
ICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAg
Y2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBv
dXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5wcmludCgi
KFRha2VzU2xvd1BhdGgpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2VzQ2FsbHM6
Ci0gICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2OWFjNTcx
M2RjOGU4ZjhiNjQ0MDAwY2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1ZGUgIklD
U3RhdHVzTWFwLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUg
IlB1dEJ5SWRWYXJpYW50LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpTR2xvYmFs
T2JqZWN0OwotY2xhc3MgU3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7Ci0KLWNs
YXNzIFB1dEJ5SWRTdGF0dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdl
IGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAgICAgIC8v
IEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAgICAgU2lt
cGxlLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgotICAg
ICAgICBUYWtlc1Nsb3dQYXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMg
dGhhdCBtYWtlIGNhbGxzLgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAKLSAgICBQ
dXRCeUlkU3RhdHVzKCkKLSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQotICAg
ICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1h
a2VzQ2FsbHMpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0dWJJ
bmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7Ci0g
ICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAgICAgICAg
bV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5
OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2Vz
U2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhB
bmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCkKLSAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAgICAgIG1f
dmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJ
ZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29s
IGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJ
ZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAm
IGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3Jp
Z2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgc3Rh
dGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAgIFN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAg
IGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQotICAg
IGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93
UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2FsbHMoKSBj
b25zdDsKLSAgICBQdXRCeUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAgCi0gICAg
c2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0K
LSAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFudHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJr
SWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZv
aWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlk
U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRpZgotICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBhcHBlbmRW
YXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwot
ICAgIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiBt
X3ZhcmlhbnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjQ1NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFmMy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIK
LQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGluZXMuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudChjb25z
dCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17Ci0gICAg
KnRoaXMgPSBvdGhlcjsKLX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9IG90aGVy
Lm1fa2luZDsKLSAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwotICAg
IG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25kaXRpb25T
ZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0
OwotICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxMaW5rU3Rh
dHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMp
OwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuICp0aGlzOwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgK
LSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gUmVw
bGFjZTsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Ci17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFu
c2l0aW9uOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAgICBy
ZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0
aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0
dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQot
ewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gU2V0dGVy
OwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OwotICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNp
emUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtp
XTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6Zml4
VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgpICE9IFRy
YW5zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX29s
ZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1
Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9v
bGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0dXJlID0g
bnVsbHB0cjsKLSAgICBtX2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlu
a1N0YXR1cyk7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
IGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpyZWFsbG9j
YXRlc1N0b3JhZ2UoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBU
cmFuc2l0aW9uOgotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojpt
YWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKLX0KLQot
Ym9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IG90aGVyKQotewotICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5vdFNldDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2Nv
bmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX29sZFN0
cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjog
ewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwotICAgICAg
ICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uo
KnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBU
cmFuc2l0aW9uOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNl
IFJlcGxhY2U6Ci0gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2Uob3RoZXIpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjog
ewotICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0dXJl
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFt
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRDb25kaXRp
b25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsK
LSAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVy
OiB7Ci0gICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0YXR1
cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVy
Z2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1lcmdlZENv
bmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFz
ZUNvbmRpdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlua1N0YXR1
cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAgICAgbV9v
bGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpCi17
Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVwbGFjZS5t
X2tpbmQgPT0gUmVwbGFjZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZz
ZXQpOwotICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAgIEFTU0VS
VCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxhY2UuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2lu
ZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBu
ZXcgZmllbGQgd2hpY2gKLSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0
aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Ci0g
ICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJl
cGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0ZXNTdG9y
YWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFjZS5tX29s
ZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVy
ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12
b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25ld1N0cnVj
dHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQot
Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0g
ICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3
U3RydWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25T
ZXQuYXJlU3RpbGxMaXZlKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBvdXQu
cHJpbnQoCi0gICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0
KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIs
ICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6Ci0gICAg
ICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0
dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlv
blNldCwgY29udGV4dCksICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBt
X29mZnNldCk7Ci0gICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0
dXMpOwotICAgICAgICBvdXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVlNWYwYTFk
ZTQwOGE1ZmJiZDFjYjdhYjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0Lmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
YWxsTGlua1N0YXR1czsKLQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5vdFNldCwK
LSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0dGVyCi0g
ICAgfTsKLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5kKE5vdFNl
dCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fbmV3U3Ry
dWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudChj
b25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29u
c3QgUHV0QnlJZFZhcmlhbnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNl
KGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQ
cm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UgfHwg
a2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9
Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBs
YWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7
Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0
ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1
Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICAgICAg
cmV0dXJuIG1fbmV3U3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRyYW5zaXRp
b25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkg
Y29uc3Q7Ci0gICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBib29sIG1h
a2VzQ2FsbHMoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAg
ICAKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0IHdv
dWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVkIGhl
bHBlcnMuCi0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50cmlu
c2ljOyB9Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0g
ICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1Nl
dCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBDYWxsTGlu
a1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsK
LSAgICB9Ci0KLSAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
dGhlcik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZD
aGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQo
KS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIHJlcGxhY2UpOwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OwotICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1
Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDZiY2NhNjdjZjE4NmM0NmJkYTAzMzA2YmEwNDNjMDQwZmE3Y2EwMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKQEAgLTAs
MCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKKwor
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGlj
QWNjZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitib29sIFB1dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFu
dHMsIHZhcmlhbnQpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgpCit7Cisg
ICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwor
ICAgIAorICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6Cisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNlIG9wX3B1
dF9wcml2YXRlX25hbWU6CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJldHJpZXZp
bmcgTExJbnQgaW5mb3JtYXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAgICAgICAg
Ly8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVy
ZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0
aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5m
b3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnRpZmllciA9ICYocHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwoKTsK
KworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJ
RDsKKyAgICBpZiAoIXN0cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlSUQgbmV3
U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICghbmV3U3Ry
dWN0dXJlSUQpIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
CisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisgICAgQVNT
RVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29kZS5tX2Zs
YWdzLmlzRGlyZWN0KCkpKSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAg
ICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUs
IHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1B1dEJ5
U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
SUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBk
aWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7
CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwor
ICAgIAorICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKKyAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGRpZEV4aXQpCisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRl
eCkpLnN0dWJJbmZvOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5m
bygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgY2FsbEV4aXRTaXRl
RGF0YSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50
KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShtYXApOworICAgIFVOVVNF
RF9QQVJBTShkaWRFeGl0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7Cisg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworI2VuZGlmIC8vIEVOQUJMRShK
SVQpCit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7Cisg
ICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJs
b2NrLCBzdHViSW5mbywKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKK30KKworUHV0
QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRl
RGF0YSkKK3sKKyAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZv
OjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKKyAgICBpZiAoIWlzSW5s
aW5lYWJsZShzdW1tYXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKHN1bW1hcnkpOwor
ICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7CisgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRv
IGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgIAorICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlk
KTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAgICAgIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAg
ICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9
IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAgICBQdXRCeVN0YXR1cyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBj
b25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChh
Y2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5
UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNz
LnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CisgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Cisg
ICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1
dEJ5VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUsIG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7Cisg
ICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gYWNjZXNzLm5ld1N0cnVjdHVy
ZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRlbnRpZmllcigpLCBhY2Nlc3Muc3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAg
ICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0g
Q29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25T
ZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBD
b21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0
U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0
dXM+KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhdXRv
IHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1
Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0
aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3Vz
dG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1h
a2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgfQor
fQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2sm
IGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAg
IEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5
dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250
ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVP
cmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlT
dGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0dXMgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBi
YXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5l
QmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LAorICAgICAgICAgICAg
ICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3Vs
dC5tZXJnZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5s
aW5lZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
bnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29u
dGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURh
dGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBibGVzcygq
c3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb21wdXRlRm9yKGJh
c2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxsRXhp
dFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0
S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQoreworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQorICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQubV9z
dGF0ZSA9IFNpbXBsZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsg
KytpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5
cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYg
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBh
IHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZp
bmUgbW9kZQorICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcg
YSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAgICAgICAg
ICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBpZiAocHJp
dmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VT
ZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7
CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlk
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0
ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAgICAgICAg
ICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRl
ZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9u
LiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20g
dGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlm
IHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5Lgor
ICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBz
bG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9
IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdpdGgg
UHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAgICAgICAvLyBzaG91bGQg
bmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdlIGFy
ZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZhdGUg
ZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhj
cGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAgaWYgKHByaXZhdGVGaWVs
ZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5n
IGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKKyAgICAg
ICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCisgICAgCisgICAg
ICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUg
Y29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUg
dXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRp
ZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmpl
Y3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
ICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0
S2luZC5pc05vbmUoKSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5IG9wdGlt
aXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBp
cyBjYWNoZWQgdG8uCisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAg
ICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25j
dXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICghdHJhbnNp
dGlvbikKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9u
KGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
KTsKKyAgICAgICAgaWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1czo6bWFr
ZXNDYWxscygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxscygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsK
K30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVzOjpzaW5nbGVJZGVu
dGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmllckZvcklDU3RhdHVz
KG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRC
eVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9y
IChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50LnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5
U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCit7Cisg
ICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAgICAgIGlm
ICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjptZXJnZShjb25zdCBQ
dXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZvcm1h
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZdICgp
IHsKKyAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1h
a2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CisgICAgfTsKKyAgICAK
KyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAg
ICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTaW1w
bGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJp
YW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAgICAgICAgICAgIGlmICghYXBwZW5k
VmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAg
ICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAg
cmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJl
U2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47
CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOworICAgIGZvciAo
UHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5maXhU
cmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJpYW50cy5pc0Vt
cHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2b2lkIFB1dEJ5
U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0
YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQoIihOb0lu
Zm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2ltcGxl
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgICAg
IG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyYTFjNzNjOGY0MWNhMTkyZTU4ZDRiZTFk
ZTE2NjEzZDkwMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgiCisjaW5jbHVkZSAi
SUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5jbHVk
ZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2NsYXNzIEpTR2xvYmFs
T2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hhaW47CitjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7CisKK2Ns
YXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBo
YXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAorICAgICAgICAvLyBJ
dCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisgICAgICAgIFNpbXBs
ZSwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAg
ICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhzIHRo
YXQgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscworICAgIH07CisgICAgCisgICAgUHV0
QnlTdGF0dXMoKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAgICA6
IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9y
bWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2Fs
bHMpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdHViSW5mb1N1bW1h
cnkgc3VtbWFyeSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAgICAgICBj
YXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgICAgIG1fc3RhdGUg
PSBOb0luZm9ybWF0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJ
bmZvU3VtbWFyeTo6U2ltcGxlOgorICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXND
YWxsczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRo
OgorICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXND
YWxsczoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIFB1dEJ5U3RhdHVzKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkK
KyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFudHMuYXBw
ZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0
ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29t
cHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAgIAorICAg
IHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywg
SUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYsIENvZGVPcmln
aW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZv
clN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAg
IFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsg
fQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsg
fQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFr
ZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBib29sIG1ha2VzQ2Fs
bHMoKSBjb25zdDsKKyAgICBQdXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OworICAgIAor
ICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgp
OyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgYXQoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNvbnN0IFB1
dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xlSWRlbnRpZmllcigpIGNvbnN0
OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJik7CisgICAg
CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorI2lmIEVOQUJMRShKSVQp
CisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1
dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgYm9vbCBh
cHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIHZvaWQgc2hyaW5rVG9GaXQo
KTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQsIDE+
IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjA3YzUzNWIz
NzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCkBAIC0wLDAgKzEsMzM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1
cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitQdXRC
eVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQorICAgIDog
UHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sKKyAgICAqdGhpcyA9IG90aGVyOwor
fQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIubV9raW5kOworICAgIG1fb2xkU3Ry
dWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhl
ci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9u
U2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgaWYgKG90aGVyLm1fY2Fs
bExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxM
aW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgZWxzZQorICAgICAgICBt
X2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lkZW50aWZpZXIgPSBvdGhlci5tX2lk
ZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJp
YW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeVZh
cmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBS
ZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJp
YW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShp
ZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgIHJlc3VsdC5tX25ld1N0cnVjdHVy
ZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCit7CisgICAg
UHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9r
aW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxs
TGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBQdXRCeVZh
cmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0
cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1
cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRT
dHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUHV0QnlWYXJp
YW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChraW5k
KCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0
cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9uZXdTdHJ1
Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxhY2U7CisgICAgbV9jb25kaXRpb25T
ZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCFt
X2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVy
ZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9u
OgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5VmFyaWFudDo6cmVh
bGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNh
c2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24o
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6
Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOworfQor
Citib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlWYXJpYW50JiBv
dGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lkZW50aWZpZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2lkZW50aWZpZXIgJiYgKG1faWRl
bnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7
CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVy
Z2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAgICAgICAg
ICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7CisgICAgICAgICAgICBpZiAobmV3
VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKKyAg
ICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246Cisg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAg
ICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhl
cik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgICAg
ICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29u
ZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAg
ICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb25kaXRpb25T
ZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6IHsKKyAgICAgICAg
aWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRp
b25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVy
Lm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fY29u
ZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAKKyAgICAgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAgICAgICBtX29sZFN0cnVjdHVyZS5t
ZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKQoreworICAgIEFTU0VSVChtX2tp
bmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJlcGxhY2Up
OworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKKyAgICBBU1NFUlQo
IXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxv
Y2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1w
dHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVu
IHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCisg
ICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2Fz
IGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAorICAgIC8vIHdvcmsgaWYgd2Ug
bmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGggaXMgcG9s
eW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiB0
cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVZhcmlhbnQ6
OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1faWRlbnRpZmll
ci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JFR0FURShQ
dXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9vbGRTdHJ1Y3R1
cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlKQorICAgICAg
ICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZv
aWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1w
bGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKworYm9v
bCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBpZiAoIW1fb2xkU3RydWN0
dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9u
ZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1f
Y2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKwordm9p
ZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8Iik7CisgICAgb3V0LnByaW50
KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgKKyAg
ICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAg
ICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAi
IHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBj
b250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoCisg
ICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJd
Iik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CisgICAgICAg
IG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICBvdXQu
cHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNDAy
YjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgKQEAgLTAsMCArMSwx
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rU3RhdHVzOworCitjbGFzcyBQdXRC
eVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVu
dW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgVHJh
bnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAgICAKKyAgICBQdXRCeVZhcmlhbnQo
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgICAgICA6IG1fa2luZChOb3RTZXQp
CisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAgICAgLCBtX25ld1N0cnVj
dHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFu
dCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5VmFyaWFudCYpOwor
CisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIsIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMgUHV0
QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMg
UHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAgICAKKyAgICBLaW5kIGtpbmQoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UgfHwga2lu
ZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9Cisg
ICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNl
IHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAg
U3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIp
OworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0
dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFRyYW5zaXRpb25U
b1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29u
c3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKKyAgICBib29sIG1ha2Vz
Q2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAK
KyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0IHdvdWxk
IGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVkIGhlbHBl
cnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50cmluc2lj
OyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCisgICAg
Ym9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBDYWxsTGlua1N0
YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsKKyAg
ICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIp
OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wgZmluYWxp
emUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworCisg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVu
dGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIp
CisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lkZW50aWZp
ZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1faWRlbnRpZmllcikg
eworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29u
c3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAgICBLaW5kIG1fa2luZDsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7
CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CisgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAppbmRleCAwYzRj
MDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3Li5mY2UwZjRkOGVlMTBlZGRiY2Yz
Yzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02MiwxMCArNjIsMTAgQEAgR2V0QnlT
dGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAotUHV0QnlJZFN0
YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBzdGF0dXMpCitQdXRCeVN0YXR1cyog
UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9y
aWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsKLSAgICBhdXRvIHN0YXR1c1B0ciA9
IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsKLSAgICBQdXRCeUlkU3RhdHVzKiBy
ZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVl
PFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3RhdHVzKiByZXN1bHQgPSBzdGF0dXNQ
dHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29kZU9yaWdpbiwgV1RG
TW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNyw2ICsxMDcs
OCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBwdXRz
KQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCmluZGV4IGJkMTU3MDU0
NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0OTgzZGJjNzY3ZDA3ZTI4MDRiZDQ0
MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkRlbGV0
ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJJbkJ5U3Rh
dHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVz
LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAgCiAgICAg
Q2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVzKiBhZGRHZXRCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsKLSAgICBQdXRCeUlkU3RhdHVzKiBh
ZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRCeUlkU3RhdHVzJik7
CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFkZEluQnlTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBEZWxldGVCeVN0YXR1cyogYWRkRGVs
ZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVzJik7CiAg
ICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyYpOwpAQCAtNzYs
NyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAgCiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+Pj4gY2Fs
bHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8R2V0
QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxD
b2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0dXM+Pj4gcHV0czsKICAgICBWZWN0
b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxJbkJ5U3RhdHVzPj4+IGlu
czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxEZWxl
dGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzPj4+IGNoZWNrUHJpdmF0ZUJy
YW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZjZWIyM2RjM2NjMjFkMzI3ZTlmYTE4
NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRmNzgxOWQ0NzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcApA
QCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogYwogICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0R2V0QnkoY29kZUJsb2NrLCAq
dGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICByZXNldFB1dEJ5KGNvZGVC
bG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhp
cywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJsb2NrLCAqdGhpcywgSW5CeUtpbmQ6
OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEyOGU2ZTI1MDFhYWIxOGU1NWQ0MWE0
Li5lMjI1NDBjMDliYzc4M2U3ZDhlMDZkNTNiN2NhODA4NzFlZTY3MjI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaApAQCAtNTQs
NyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5SWRE
aXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZhbCwKLSAgICBQdXQsCisgICAgUHV0
QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQ
cml2YXRlTmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQz
MGMwY2U2OGMxMWMxN2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3
N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQ
cm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAi
TnVtYmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJT
ZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5
NzMsNyArMzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRG
b2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
c1tpXTsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dy
YXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAg
IHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgp
KQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAg
IHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0g
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAg
ICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7
CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNl
IHRoaXMgaXMgcmVhbGx5IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5l
d1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAg
ICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC00MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0
dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgp
ID09IFB1dEJ5SWREaXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAg
ICAgICAgICAgICBhdXRvIHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFBy
aXZhdGVOYW1lQnlJZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVs
ZFB1dEtpbmQ6Om5vbmUoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9
IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUu
bV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNo
ZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxl
SWRlbnRpZmllcigpLAogICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRL
aW5kKTsKIAogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1
MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0
cmFuc2l0aW9uczsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50
cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCAr
NDE2MiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFsbEdvb2QpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBw
ZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAg
ICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czoKQEAgLTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsK
KyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVj
dHVyZS5pc0Zpbml0ZSgpKQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0
ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2Rl
LT5wdXRCeVN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIx
NmEzOTZkNzE2MDQyMGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNj
YjFiMWQzOTM3MTUzODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyAr
NDAyLDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoK
ICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAg
ICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2Mjdi
Li43ZjQwMmU2OTdmOWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRmMjIzNzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZv
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9w
ZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgiCkBAIC03NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgi
CiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFn
cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFu
ZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwx
MSBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2Jq
ZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0
IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSog
YmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJl
U2V0Jik7CiAgICAgCi0gICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhl
IHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBH
ZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5
cGUmKTsKIAotICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIs
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUq
IHZhbHVlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRC
eUlkKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRl
Q29kZVBhcnNlciB7CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgR2V0QnlTdGF0dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1
cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNE
aXJlY3QsIEVDTUFNb2RlKTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUq
IGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUs
IGNvbnN0IFB1dEJ5U3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRl
eCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5h
bWVCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFBy
aXZhdGVGaWVsZFB1dEtpbmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlT
dGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJ
ZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1
cywgRUNNQU1vZGUpOwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6
OmxvYWQoCiAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3Bl
cnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAg
ICAgICAgICAgICAgICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkgYWdyZWUgb24gdGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAg
ICAvLyBoaWxhcmlvdXNseSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSBy
ZWx5aW5nIG9uIHN0cnVjdHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxl
YXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9m
IGhvdyBHZXRCeVN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8g
YXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1
c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogcmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBw
cm90by4gSG93ZXZlciwgdGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBj
aGFuZ2VkIGluIHRoZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJl
IGZvcgpAQCAtNDU5Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAg
ICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUo
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQsIE5vZGUqIHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJh
c2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9k
ZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShi
YXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCks
IHZhcmlhbnQuc3RydWN0dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNl
LCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3
LDM5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIg
ZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmVtaXRQdXRCeUlkKAotICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJv
b2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBw
dXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYg
KGlzRGlyZWN0KQogICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVu
dGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAg
ICAgYWRkVG9HcmFwaChwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6
IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFs
dWUpOworICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5
SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwg
YmFzZSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAog
ICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYg
cHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgs
IEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFN
b2RlKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAg
ICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5p
c1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VB
Y2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9k
ZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0
YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAo
IW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAg
ICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dy
YXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAg
ICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAg
ICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBo
aWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUp
OworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1h
eFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0
UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBl
Y21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudElu
ZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAg
ICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFy
aWFudEluZGV4ID0gcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9
IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0u
Y29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2Us
IGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwor
ICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25k
aXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtNTAzOSwyOCArNTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAg
ICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAg
ICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5
U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAg
ICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBw
dXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9n
cmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50
cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBw
dXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0g
aWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBP
cEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQo
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQm
IHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2lu
ZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRU
b0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlk
U3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5y
ZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0
QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxh
dGlvbigpKSkKQEAgLTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRC
eUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7Cisg
ICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNl
KTsKIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAg
aWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBl
Y21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1
ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBj
YXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNl
KTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFz
ZSk7CiAKICAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVl
KSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2Rl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYg
KzUxODMsMjYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAg
ICAgCiAgICAgZGVmYXVsdDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVy
LCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwg
ZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUq
IHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVG
aWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYg
cHV0QnlTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsK
LSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlm
ICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUo
KSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5s
aW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0
ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5k
KSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChw
dXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5t
X3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRC
eVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFu
LmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0
aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lu
bGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFu
dHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50
aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7
CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMu
dmFyaWFudHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZh
cmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0
aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlk
U3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMu
dmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJO
dW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEp
LCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJU
KHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVz
Lm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0g
cHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAg
IGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6
UmVwbGFjZTogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsK
LSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAg
ICAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUp
OwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEs
OSArNTI0MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJ
ZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uOiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAg
ICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFk
ZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMs
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMo
Y3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZh
cmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29t
cGlsZUFzUHV0QnlPZmZzZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5
SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmln
aW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklU
LCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGlt
ZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1p
Z2h0IGhhdmUgc29tZSBpbmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5j
bHVkaW5nIGNhY2hlZCBjZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFp
bGFibGUuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNjc3OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAg
ICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAg
JiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRJZGVudCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAg
ICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlk
KCkpOwotICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFw
aC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBG
cm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxs
KCkpOworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkVHlwZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsK
IAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZv
KGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMg
PSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1
cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgICAgICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96
ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJv
cGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAg
ICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8t
PnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51
bWJlciwgdmFsdWUsIHN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0
KQotICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlm
aWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9w
dXRLaW5kKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFz
UHV0QnlPZmZzZXQpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwg
T3BJbmZvKCksIE9wSW5mbyhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFs
dWUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAg
LTY1NjcsMTIgKzY1NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVj
dCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0
YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAg
ICAgIFB1dEJ5U3RhdHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3Rh
Y2ssCi0gICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9y
aWdpbigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVy
LCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNv
ZGUubV9mbGFncy5lY21hTW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJl
ciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29k
ZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5
X2lkKTsKICAgICAgICAgfQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNoR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVy
KSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAg
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlT
dGF0dXMgc3RhdHVzOwogICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHVpZCwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBm
YWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1
czo6VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3Rh
dHVzKFB1dEJ5U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzLm51bVZhcmlhbnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0u
a2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAg
ICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21h
TW9kZSgpKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg4MTksNDUgKzg4MDgsMjcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2Rl
SW5kZXggb3NyRXhpdEluZGUKICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVl
KTsKICAgICBib29sIGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwogICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxzZTsKLSAgICB7Ci0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
LSAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICB7Ci0gICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9y
aWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwg
YnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhl
cmUgaXMgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAg
ICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAmJiAhYnlW
YWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0g
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwot
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAg
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyb3plbiA9
IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICBpZiAoIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZElkZW50KQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgJiYgIW1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0
YW50VmFsdWUpKSB7CisKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6
OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0
YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdp
bigpKTsKIAorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3Rh
dHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAg
aWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5
KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1
aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICBieVZh
bEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlk
KSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGly
ZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29t
cGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBpbGVk
QXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJ
bmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb21waWxlZEFz
UHV0QnlJZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRl
eCA5MTY0NzBkMTdkNTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3OTU4YjRhLi42ZjIwNGQyYzVkZTBh
NjEyZjczMWM5NTdiNDYxZGNmMzBjNGExMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaApAQCAtNTY5LDcgKzU2OSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKaW5kZXggODZhM2QwNzY2
NGQ3ZmE5Mjc1MTI5OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNlOWZmMGViNWRhNTEwZWMyMzQwNjQ2
MmE3MWU4ODA5NTA5NjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBjbG9iYmVyc0V4
aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2Fz
ZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAppbmRleCBlYWVhZjg1ZWEyNTQxNzI1NzU1ZjQ4Y2VmZGVkZTAzYjgx
YzlmYTJhLi5iODgyNWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFkOTMyNGE0MGMxNjE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAi
R2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
Q2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTAxLDcgKzUw
MSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgICAgICAgICAKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
UHV0QnlWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmljRmlsdGVyKFsmXSAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJh
c2VWYWx1ZS5jb250YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSkpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTUxMywxMSArNTEzLDkgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UodmFyaWFu
dC5pZGVudGlmaWVyKCksIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEzLDcgKzEyMTEsNyBAQCBjbGFzcyBD
b25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9
CiAKLSAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUq
IG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBlbWl0UHV0
QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFj
dFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9k
ZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAt
MTIyNCw3ICsxMjIyLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAg
ICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBudWxscHRyOwotICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAg
dHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkp
OwogICAgICAgICB9CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0
KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICAgICAgbm9kZS0+b3JpZ2lu
LmV4aXRPSyA9IGNhbkV4aXQ7CiAKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIGlmIChkaWRBbGxvY2F0ZVN0
b3JhZ2UpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgTnVrZVN0cnVjdHVy
ZUFuZFNldEJ1dHRlcmZseSwKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAgY2xhc3MgQ29uc3RhbnRG
b2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBpZiAoIWJhc2VWYWx1ZS5tX3N0
cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFB1dEJ5
SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgUHV0
QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgYmFz
ZVZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBub2RlLT5j
YWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJ
ZGVudGlmaWVyKCksCiAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7
CiAKICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKQEAgLTE0MjQsOCArMTQyMiw4IEBA
IGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKIAogICAgICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0
cmFuc2l0aW9uczsKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IHN0YXR1cy52YXJpYW50cygpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZh
cmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlh
bnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgud2F0
Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMTQ0OCw3ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkp
OwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJp
dmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSB8fCBwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkp
OwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFudC5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4
ICsxNDYyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
ICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0
IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KIAogICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
RmlsdGVyUHV0QnlJZFN0YXR1cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBGaWx0ZXJQdXRCeVN0YXR1cywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhub2RlLT5v
cmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAogICAgICAgICAgICAgRWRnZShiYXNlTm9kZSkpOwog
CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KCkuZW5zdXJlKHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5k
ZXggNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2MzN2UxOGYxZS4uZTY0ODE2N2MxMTg2
YmM4YzkzZjMyZThjNTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0ZTlhNWNmMmQ1NmM2NDgzZDIyYWJi
YTY2NzJhYzczODUwOS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFjNTI0OTE1M2Y5ODZlMzk4YTI2MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yODY1
LDcgKzI4NjUsNyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
Y2FzZSBDUFVJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJ
ZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRh
NzM1ZGZlMGYzLi4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBO
b2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdl
dEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91
dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1
dEJ5SWRTdGF0dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0
YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1l
cmF0b3JNZXRhZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9k
ZXMgPSAiLCBub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9k
ZS0+aXNKdW1wKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNjYjNjNjkuLjEyZjI5
ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUyLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2Rl
bEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFs
cywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBsaW5r
QnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRl
eCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4zNjE3NDc3ODFmY2Q2
ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNzIEpJVENvbXBpbGVy
IDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5kKElubGlu
ZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAg
fQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2Vu
LCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAgICBtX3B1dEJ5VmFs
cy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPihnZW4sIHNs
b3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0IEpJVERlbEJ5SWRH
ZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQogICAgIHsKICAgICAg
ICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0
b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFzcyBKSVRDb21waWxl
ciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAg
IFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX2dl
dEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0
b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0
QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVX
cmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwogICAgIFZlY3RvcjxJ
bmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5VmFsczsK
ICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVyYXRvcj4sIDQ+IG1f
aW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IGVj
NWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRhZTQ1MzUwNGNkNmI3
OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIE51a2VTdHJ1
Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGFjMmI0
YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIwMTJkY2E1OGJkYjk4
Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBA
IC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAj
aW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0j
aW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKICNp
bmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5
cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzkyLDcgQEAgc3RydWN0
IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwg
Mj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFyaWFudHM7CiAgICAg
CiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRl
c1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRCeVN0YXR1cygpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3RhdHVzOworICAgICAg
ICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAgICAgCi0gICAgUHV0
QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMqIHB1dEJ5U3RhdHVz
KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkpOwotICAgICAgICBy
ZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAgIEFTU0VSVChoYXNQ
dXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5U3RhdHVzKj4o
KTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFhMDJlNTY1NDk2Yjk4
NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVmZDg5ZjY0M2RkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01NDYsNyArNTQ2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZpbHRlckNhbGxM
aW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyR2V0QnlTdGF0
dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5U3RhdHVzLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1cywgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5l
cmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQxNmVhYmViYjllMjIy
MzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2JlZGRmNjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KIAog
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBJ
bmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlmIChjYWxsSW5zdHJ1
Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGluZXMgU2V0dGVyQ2Fs
bCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRoaXMgb3BfcHV0X2J5
X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9zc2libGUgdGhhdCB3
ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBjb25zaWRlciB0aGUg
Zm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJhc2VsaW5lIENvZGVC
bG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4gKEEpIGdldHMgREZH
IChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVjdHMgZW5vdWdoIGlu
Zm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1cmVTdHViSW5mbyBm
cm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxsLgotICAgICAgICAg
ICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNlIGl0IGlzIG5vdCBl
eGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAgICAgICAgLy8gNS4g
VGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28gKEEpIGlzIGV4ZWN1
dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9jayBhZ2Fpbi4KLSAg
ICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0dGVtcHRzIHRvIHNl
YXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlkIChvcmlnaW5hbGx5
LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChBKSdzIEpJVERhdGEg
aXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29kZU9yaWdpbihjYWxs
Qnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5VmFsSW5m
byk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+ZG9uZVRhcmdldC5y
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVj
b2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKICAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJldGFnZ2VkPEpTRW50
cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1NWRmMjE2
ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlkNDA5Zjcx
ZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgsNyArMTI1
OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
ICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSArMjU1NCwx
MyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJk
ZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3Qg
dGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQo
UHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBw
ZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBw
ZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zm
c2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5v
ZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMTYyMmRk
OGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkwZDZkOTg1
NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0NDksNyAr
MTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
ICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUwNDRjZjlk
YjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5OGQ2OGM4
YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJh
Y3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwog
ICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCmluZGV4IGFiYzhkMThhYTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUu
LjVkYTA0Mzg3YjZkMGVlODk4NzQ4YzI5ZWM3Nzg2NGZiYzkxZWIwZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAt
NDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5
U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1
dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApp
bmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1
OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3MSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2
NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMx
Miw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNp
emUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThh
MWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGlu
Z1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
ICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAg
LTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkx
ZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyAr
NDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1By
aXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAppbmRleCBiMDAxZDEzMmYwMmZmYzM4MjUzYzM4ZGYyZTQ5YjBjZjM2ZTYyZjY2
Li5hNTQzODA5NjU4MGU0MmY3NTE1NDZkMzU5YmNiMDQxMWRmZDQ4NjA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDks
NyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6
Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0
YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xk
U3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwor
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3Jh
Z2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3
ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1
YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3Rz
KGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUg
IlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAppbmRleCAwYjRjMmI5YmUwZjVmZmYxNTFhM2IwN2U5YWEyNGZjY2Y5MDUwMzk4Li40
MTE4NmRiZTk0MjA5NjI3MDBhNWI5NzY5MTNmZjBhN2IyNGI3YWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNTcsNyArMTM1Nyw4IEBAIGNs
YXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAg
IHZvaWQgdW5ib3hEb3VibGUoR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIEZQUlJl
ZyBmcHIsIEZQUlJlZyBzY3JhdGNoRlBSKQogICAgIHsKLSAgICAgICAgbW92ZUludHNUb0RvdWJs
ZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwciwgc2NyYXRjaEZQUik7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoRlBSKTsKKyAgICAgICAgbW92ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0
YWdHUFIsIGZwcik7CiAgICAgfQogICAgIAogICAgIHZvaWQgYm94RG91YmxlKEZQUlJlZyBmcHIs
IEpTVmFsdWVSZWdzIHJlZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYw
NGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0
YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNy
byhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2Vs
ZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0
QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1h
Y3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAog
ICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBl
ZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7
CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAg
bV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJ
ZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJ
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09
IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJ
ZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2lu
QnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5z
dGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6
ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDY0NDBmZjI0MTBm
MDM3MmQxYjVmYjdmMDU3N2ZkNzBmNDllMjA1NTguLjI2YWZmZGE1N2M0MDk1YjQ5MWFiYjU0MWYy
NjI3YjFiZjBhNjFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CkBAIC0yNjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMzg0
LDM2ICszNTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlw
ZSwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAg
ICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOwotICAgICAg
ICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJl
Z1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9y
ZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCi0gICAgICAg
IC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxy
ZWFkeSBwcm9maWxlZC4KLSAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMlB1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91
c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMyU2hhcGUpOwotICAg
ICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBl
bWl0RG91YmxlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdl
bmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgRG91
YmxlU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRU
eXBlLCBieVZhbEluZm8pOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hh
cGUgPSBDb250aWd1b3VzU2hhcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAg
ICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBCeVZhbEluZm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5
cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBl
Y21hTW9kZShPcCk7CkBAIC0xMDY0LDYgKzEwMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAgICAgVmVj
dG9yPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAg
ICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAgICAgVmVj
dG9yPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJ
VEluQnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5CeVZhbEdl
bmVyYXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5lcmF0b3I+
IG1fZGVsQnlJZHM7CkBAIC0xMDkxLDYgKzEwMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWdu
ZWQgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVk
IG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZh
bEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJ
TlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsK
ICAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAK
aW5kZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uYTkwYzg2OWQz
OTc5OTc2YzZmZmE2ZWRkMjNmYzMyNjM0NDJmNTlmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0Miw3ICsx
NDIsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAgIEVDTUFN
b2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdlbmVyYXRv
cihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQ
dXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAgICAgOiBK
SVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IEFjY2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5m
b0dQUikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0S2lu
ZChwdXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw2NyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJh
dG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgp
CiAgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJh
dG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
UiwgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKKyAgICA6IEJhc2UoY29kZUJs
b2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2Vk
UmVnaXN0ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKKyAgICAsIG1fcHV0S2luZChw
dXRLaW5kKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAg
IG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAgbV9zdHVi
SW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJlZ3Mu
cHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFs
dWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiA9IHN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+
YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJv
cGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBt
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShM
aW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6
ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93
UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0aW9uX0dTc2lKSkMgSklUUHV0QnlW
YWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9wdXRLaW5k
KSB7CisgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2Rl
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9kZS5pc1N0
cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2Rl
LmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVy
IGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJSZWcgc3R1YkluZm9HUFIpCiAgICAg
OiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNj
ZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCBlZTY4MTQxMDFhODFlYmQxNTVi
ZjRkYjY5M2ZmNDdjOGEyNzhmN2ZiLi4zMDViNzBkM2Y5MmIxZmUzYjVhNjY3ZGIzMzQ0YmI2Njdk
NmZiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAgY2xhc3MgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogCiBjbGFzcyBK
SVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogcHVi
bGljOgotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAgICAgICA6IG1fZWNtYU1vZGUoRUNN
QU1vZGU6OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRl
ZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKQEAgLTE0
MiwxMCArMTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
SklUQnlJZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1
bmN0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBFQ01B
TW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CiAgICAgUHV0S2luZCBtX3B1
dEtpbmQ7CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKCkgPSBkZWZhdWx0
OworCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVn
cyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFN
b2RlLCBQdXRLaW5kKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAubV9qdW1wLmlzU2V0
KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1wOworICAgIH0KKworICAg
IHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVy
JiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CisKKyAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rp
b24oKTsKKworcHJpdmF0ZToKKyAgICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0
cmljdCgpIH07CisgICAgUHV0S2luZCBtX3B1dEtpbmQ7CisKKyAgICBKU1ZhbHVlUmVncyBtX2Jh
c2U7CisgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOworfTsKKwogY2xhc3MgSklURGVsQnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IgewogICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5k
ZXggNzc0NGI1MDgzN2FlYTdiYTA4NWEwMTM0NWZiYmYyYjY4YmYwZDQyNS4uNzdhZjViMTMzZjQ1
ZmIxMWQ0MDViMzY5OTJiZTBjNzI4MDY0YTAzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKQEAgLTM2NCwyNCArMzY0LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmkK
ICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk91dE9m
Qm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2Rl
KEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJvZmlsZVNhdyA9IFtd
IChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KSB7Ci0gICAg
ICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJyYXlNb2Rl
cywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9IHBy
b2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChhcnJheVByb2ZpbGVT
YXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklURG91YmxlOwot
ICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCi0gICAgICAg
IHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEFy
cmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKLSAgICBy
ZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4ZDc3NWJlY2M3MWY4
MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRhOTcxOWEyOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5LDcg
KzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyArNzUx
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
LCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8s
IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHVi
SW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyArNzgy
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
LCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJ
bmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4MTMs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8s
IFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nl
c3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7
CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2Nr
LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRp
ZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywg
UHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwogICAg
IH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSgog
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRl
bnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1
YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICByZXBh
dGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVy
ZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVD
TUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVl
IHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsKICAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0aWMg
dm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGdsb2Jh
bE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1cm47
Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAgICAg
ICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0
T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0
T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1dCB0
byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5m
byAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vi
c2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAg
ICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3Qo
KSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1
ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwg
SlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQor
c3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUluZGV4
ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJlSW5k
ZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpAQCAt
OTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAg
ICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNl
dE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDAy
LDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNl
T2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVl
LCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1
dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51
aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
T2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERp
cmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwgdmFs
dWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0
aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0aW1p
emUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVj
bWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2VlIGlm
IGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwotCiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0Nv
cHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAg
ICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCgh
YnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4
aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0g
ICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0
dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChh
cnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAg
SklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVz
dWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFz
ZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5n
TW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBpZiAo
c3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
KSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAg
ICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
cGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBh
bmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4g
ZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9u
UmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQg
PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNoZWFi
bGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJv
cGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwg
IXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFN
b2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBpZiAo
YmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJ
ZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJv
cGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXAp
OwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVy
dHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgp
ICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0
dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQ
dXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5k
OjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBn
ZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1
YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFs
dWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1
YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRl
ckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6
QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3Vs
dCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQg
IT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtl
IHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ug
c3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNh
c2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVj
dHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMg
dG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5bW9y
cGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSBy
ZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQg
Pj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9m
aWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1
bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAg
ICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRv
b2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQot
ICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0
QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5m
bywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZv
LCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0aW9u
UmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBK
SVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRp
bWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpO
b3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8s
IHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2Ny
aXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJh
bWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUu
aXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0g
ICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAmJiBh
cnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9uV3Jp
dGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0p
OworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAg
SklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAgICAg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1Yklu
Zm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0
IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRp
bWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0g
ICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVV
cDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRp
ZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0g
Qnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAg
ICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5
VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtp
bmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdl
bmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vi
c2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUu
aXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJl
QmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpw
dXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAg
ICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xv
dCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJl
c3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1
bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0
YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1h
a2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9y
IGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9i
amVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3Ig
dXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5
bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRo
ZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291
bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJl
Y3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIHBy
b2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OwogfQog
Ci1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFN
b2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7
CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlw
dCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9
IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVC
bG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJf
UkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAg
ICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0g
ICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3JpcHQs
IHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAK
LUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBB
cnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRpcmVjdFB1dEJ5VmFs
T3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkp
OwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RH
ZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdl
bmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBl
Y21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBw
dXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmls
ZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJz
Y3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRv
b2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKwor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2Vu
ZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VW
YWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1
YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJl
Y3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwg
dmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0
aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJh
c2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7
Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7
CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwg
cHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAyNTg0ZTk5NWU0NjZk
ZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0YmU4M2UwNmJlMDYy
NTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZh
bEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9k
ZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
QnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqLCBK
U0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNjc1MTRlYjYyZmE5MjJiMDNhYjYw
NjM0YWFhNmUyNzcxNjY4M2ZjNC4uMDBlNzY4NDc5ZDcwNTIxZTNlZTIzZWM0ZjU4YTYyZDA0NDRk
NGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKQEAgLTQzOCwxNzcgKzQzOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsK
KyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQ
dXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5h
bWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAg
ICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIo
Z2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJvcGVy
dHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJy
YW5jaElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3Mo
JmJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
Ci0gICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOwotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNl
ZSBjb21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRvV29yZChy
ZWdUMSwgcmVnVDEpOwotICAgIH0KICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRv
IHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJ
bmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hv
b3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklU
SW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdl
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMyksIHJlZ1QyLCBlY21hTW9kZSwgcHV0S2luZCk7CisgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0g
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwo
KTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1v
ZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1K
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJ
bmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1w
KEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihO
b3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRy
dXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0KLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIG91
dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJl
c3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMp
OwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0gICAgICAg
IHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1wIG5vdElu
dCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAg
IG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVn
VDMpOwotICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAgICAgICByZWFkeS5saW5r
KHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENvbnRp
Z3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVt
aXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKLSAgICBzdG9yZTMyKHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLXsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAg
YXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNz
KCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihB
cnJheVN0b3JhZ2VTaGFwZSkpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NCha
ZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAgIGVtcHR5
LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBicmFuY2gzMihCZWxv
dywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVuZC5saW5rKHRoaXMpOwotICAgIAot
ICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBV
c2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byBy
ZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2MSwxMiArNTE1LDE1IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2Rl
OjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAg
ICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUu
bV9lY21hTW9kZTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTY3NCwxNiArNTMxLDE0IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsK
KyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbElu
ZGV4KytdOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8sIFRydXN0
ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMywgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
Njk0LDI4ICs1NDksMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9
IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZVBSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQogICAgIENhbGwgY2FsbDsKKyAgICBhdXRvIG9wZXJh
dGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYnlWYWxJ
bmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplOworICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwogICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CisgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVz
cyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC03MzYsMTggKzU4OSwxOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5m
b0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0g
YXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQ
UjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVj
dEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk+KGdsb2Jh
bE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwg
ZWNtYU1vZGVHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsKICAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0
LCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsK
KyAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CiAgICAgZWxz
ZQogICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgwOSwxMyArNjYyLDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQ
UjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRH
UFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZv
KSwgYnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihwdXRLaW5kLnZhbHVlKCkp
LCBwdXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKQEAgLTg1MSwxNCArNzA0LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1
bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1lbnRHUFI1
OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0
R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIp
OwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVO
YW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1
ZVBSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BS
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQ
Uik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpAQCAtMzI5MCw4MiArMzE0Myw2IEBA
IHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXN0ZXJJRCBjZWxsLCBSZWdp
c3RlcklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRzTGlua0ZvcldyaXRlQmFycmll
ciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEpJVEludDMy
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxw
dHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxw
dHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAg
ICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9y
SklUQXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoYnl0ZWNvZGUsIGJh
ZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAg
ICAgICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IG5ldmVy
IGNvbWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Ci0g
ICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5l
Q2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xv
d1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5kb25l
VGFyZ2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAgICAgIEFT
U0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxl
QWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYXJDYWxscy5sYXN0KCkuZnJvbSwg
bV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0RpcmVj
dCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRf
YnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAgICAgCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0
dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWxfZGlyZWN0
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5k
YXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZh
bEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAg
ICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9iYWRU
eXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRo
aXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5p
dCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3Rl
ZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci10ZW1wbGF0ZSB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1v
ZGUpOwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJ
ZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0zNDA3LDIyMyArMzE4NCw2IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2lu
ZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKChwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9k
aXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQg
PT0gb3BfcHV0X2J5X3ZhbCkpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNo
ZWRJZChieXRlY29kZSwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNl
cyk7Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2sp
OwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZUNhc2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3MuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywg
YnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgY2Fs
bFNpdGUgOiBtX25lYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUp
OwotICAgIH0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9mYXJDYWxscykgewot
ICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBnZW4uZmluYWxp
emUocGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVyKTsKLQotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hC
dWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3Zh
bCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0KSA/ICJfZGlyZWN0IiA6ICIiLCBw
cm9wZXJ0eU5hbWUudWlkKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIGJ5VmFsSW5mby0+
c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1
bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9z
bG93T3BlcmF0aW9uID0gcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9ub3RJ
bmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMp
KTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90
aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qg
b2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0
ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFs
PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlm
aWVyKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wUHV0QnlWYWxEaXJlY3Q+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtp
bmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6
SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlwZWRBcnJheVR5cGUg
dHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0g
ICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVT
Y3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNl
bHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0
eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVn
aXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gy
ID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0g
ICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFy
bHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXND
b3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0
eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1
dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlw
ZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVP
dXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVt
cCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKSk7Ci0jZWxzZQot
ICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpKTsKLSNlbmRpZgotICAg
IAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5
X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2Ug
dG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRp
b25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3Jh
dGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgaWYgKGlzQ2xhbXBlZCh0eXBl
KSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7Ci0gICAgICAgIEFT
U0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKLSAg
ICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBU
cnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2Ny
YXRjaCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAoKTsKLSAgICAgICAgdG9vQmlnLmxp
bmsodGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZmYpLCBlYXJseVNjcmF0Y2gp
OwotICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAgICAgIGluQm91bmRzLmxpbmsodGhp
cyk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBj
YXNlIDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRj
aCwgcHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAg
ICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgc3Rv
cmUzMihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVz
Rm91cikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3Ag
Ynl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBU
eXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Ci0gICAgCi0gICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAg
UmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0
Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJl
Z2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9
IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3Rl
cklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAg
ICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNo
LCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAg
ICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5r
KHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVk
QXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5
cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5
QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5
U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihlYXJseVNj
cmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7
Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAg
ICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKLSAgICBtb3ZlNjRUb0Rv
dWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZWxz
ZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICBK
dW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKTsKLSAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIEp1bXAgcmVhZHkg
PSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2NyYXRj
aCwgZnBSZWdUMCwgZnBSZWdUMSk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbmRpZgotICAg
IAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5
X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2Ug
dG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRp
b25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3Jh
dGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgewotICAgIGNhc2UgNDoKLSAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBS
ZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxh
dGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgODoKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNo
LCBwcm9wZXJ0eSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRl
eCA3NWQwYmQ3ZjZlZjM1Yzc2MjczMTNmMjZiYTY1YTE2OGQ4M2I5NDU2Li5iOThiZmVjZWRhYTU1
NjAxZjk1YTg4YmVkYTYxYjA5ZjFhMzQzNDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTU0NSw3ICs1NDUsNyBA
QCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZAogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CiAgICAgICAgIG5v
dEludC5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwg
ZnBSZWdUMCwgZnBSZWdUMSk7CisgICAgICAgIG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1Qx
LCBmcFJlZ1QwKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1Qw
KSk7CiAgICAgICAgIHJlYWR5LmxpbmsodGhpcyk7CiAgICAgICAgIHN0b3JlRG91YmxlKGZwUmVn
VDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmExMzQ1ZjY5
NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQxOTQzZjhjODFkN2YyNGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQgQEAgdm9p
ZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgYXV0
byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90
ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlh
dGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0
QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAgIHN3aXRjaCAocHV0S2lu
ZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0Owot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7
Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VS
VChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlL
aW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOwor
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIg
aGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0
eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCitzdGF0aWMgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBzd2l0
Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAg
ICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNs
b3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBv
cnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlL
aW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDggKzcyMyw4IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQ
YXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9s
ZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRB
ZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nl
c3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2Rl
KCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFt
ZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21l
Q29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0
aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0
aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIGlmICh0cnlDYWNo
ZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hl
KQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYgKHRy
eUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2lu
ZCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJh
eVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQor
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgewor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNz
VHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVk
QXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZv
KHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2Ogor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
eXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0
aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAg
ICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAg
ICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQz
MlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91
YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
RUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJh
dGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxh
Y2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkp
OworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAg
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVX
YXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCBy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVl
IGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1
dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVE
ZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCkBAIC05
ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAg
ICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzU2LDI4ICsx
ODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQogfQogCi12b2lkIHJlc2V0
UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9
IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAgIEZ1
bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlv
blR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0
eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5j
dGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25U
eXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAg
ICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJs
b2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVz
ZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtp
bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMxOWYwMmQ0ZDQwMTk1ODFl
NWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhjZjY4
ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC00Myw2ICs0Mywx
MSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5hbWVCeUlkLAogfTsKIAor
ZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCit9OworCiBlbnVt
IGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApAQCAtNTYsNyArNjEsOCBA
QCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90
JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoUHV0QnlJRChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1dEtp
bmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlm
aWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9pZCByZXBh
dGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJv
b2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBAQCB2b2lk
IGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtDYWxs
KFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2b2lkIHJl
c2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9p
ZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVz
ZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7CiB2b2lk
IHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQpOwog
dm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7
CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNiLi43MmU3
YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcgKzMyLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9mIGFsaWFz
IGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGVyZSBp
cyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5jcHApCisv
LyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRC
eVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0aW5nIHRo
ZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBpbXBsZW1l
bnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhpcwogLy8g
YWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436051</attachid>
            <date>2021-08-20 18:15:41 -0700</date>
            <delta_ts>2021-08-21 04:59:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210820181541.patch</filename>
            <type>text/plain</type>
            <size>286185</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OTQ0MjhiODVhNzdjODkyNDM2YTBjNjlkNTYwNmM0NTJlNWM2Mzc1Li5iOTUzNWY2YjFkMDdlMjJk
ZTMzM2RhMzA3ZjdjMjRkNGI5MGIzMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODAgQEAKKzIwMjEtMDgtMjAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5r
VG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJz
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojpv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJp
YW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQ
dXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFu
dDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlND
OjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwp
OgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAg
KiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZh
bCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVy
YXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZh
bEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmNob29zZUFycmF5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAo
SlNDOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUpOgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9wdGltaXppbmdQ
dXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAg
KEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUluQnkpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5KToKKyAgICAgICAgKEpTQzo6
dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5o
OgorCiAyMDIxLTA4LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0pTQ10gU2ltcGxpZnkgbW92ZUludHNUb0RvdWJsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBhZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4z
MjNkOGE0MGUxZjZlMjNmY2UyN2VkN2MwOGRiNTMyNDczYjI2YTU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENG
NjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYx
NENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkz
MzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4Qjky
QzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAw
RTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUy
QUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1
IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1
dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2
MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2NiwxMSArMjg2NiwxMSBAQAog
CQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8q
IEdldEJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3Rh
dHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFB1dEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYg
LyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVj
dHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhB
M0YgLyogUHV0QnlWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1
dEJ5VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4
NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJl
bmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04Njk1LDEwICs4Njk1LDEw
IEBACiAJCQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmgg
Ki8sCiAJCQkJMEYxNUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8s
CiAJCQkJMEYxNUNEMjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJ
CTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkw
RjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNC
NEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0
QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhB
M0YgLyogUHV0QnlWYXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8q
IFB1dEtpbmQuaCAqLywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRT
dGF0dXNlcy5jcHAgKi8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVk
U3RhdHVzZXMuaCAqLywKQEAgLTEwNTA2LDggKzEwNTA2LDggQEAKIAkJCQk3OTE2MERCRTFDOEUz
RUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEy
MThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0Qy
MzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlh
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXRE
aXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1
MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0
Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAppbmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBk
Li43MDc3ZWY5YWUzMTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVC
bG9jay5jcHAKIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlh
YmxlQWNjZXNzQ2FzZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3Jk
ZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9T
ZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAKaW5kZXggZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgy
ODBjMzViNi4uMDdjMTgxZTc1MjM4NmI4OTgwOWMzNGFkOTk4MWIwMTk0ZGI3ZDQ2YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiAr
OTksMTkgQEAgUmVmPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3Vz
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNj
ZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmll
ckNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0
cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRE
b3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2
ICszNTIsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2go
KSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYg
KzQxNywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkg
Y29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6
CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0
NzcsMjQgQEAgYm9vbCBBY2Nlc3NDYXNlOjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBjYXNlIEluZGV4ZWREb3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7
CiAgICAgfQogfQpAQCAtNTY5LDYgKzY0NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxs
cyhWTSYgdm0sIFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBj
YXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3Jh
Z2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAg
Ym9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5
cGUoKSA9PSB0eXBlKCk7CiAKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTEx
OTksOSArMTMwMyw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAg
ICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQ
Uik7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBpc0VtcHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOwpAQCAtMTIyNywxNiArMTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAog
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNP
dXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBq
aXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0
LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92
ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAg
ICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0
Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAg
ICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAg
IGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAg
ICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwog
I2VuZGlmCkBAIC0xMjYyLDIxICsxMzYzLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9m
Qm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIs
IHNjcmF0Y2gyR1BSKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxv
YWQpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9
IEludmFsaWRGUFJSZWcpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0g
aml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxB
bmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAg
ICAgICAgICAgICAgaml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAg
IGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRj
aDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIp
KTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1w
dHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZh
bHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQ
UikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNo
M0dQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElm
RW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BS
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3Jh
dGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4Nywy
NjggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7
CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJl
dXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVy
cygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25v
cmUubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3Vs
dCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQz
MiBjaGVjayBkb25lIGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJy
YW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOwor
ICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxs
b2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8u
cHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHVi
SW5mb0dQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworI2VuZGlmCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGU7CisKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kSWdub3JlOworICAgICAgICBhdXRvIHByZXNlcnZlUmV1
c2VkUmVnaXN0ZXJzID0gWyZdIHsKKyAgICAgICAgICAgIHByZXNlcnZlZFN0YXRlID0gYWxsb2Nh
dG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgICAgIH07CisK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdG9yZVJlc3VsdDsKKyAgICAgICAgaWYgKG1f
dHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisKKyAg
ICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworCisgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3Bl
cnR5R1BSLCBzY3JhdGNoMkdQUik7CisKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQu
YnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworCisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZTsKKyAgICAgICAgICAg
IHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBJbnQzMlNoYXBlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IERvdWJsZVNoYXBlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAg
ICAgICAgIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhw
ZWN0ZWRTaGFwZSkpKTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsK
KworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
aXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0
LmxhYmVsKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2Fz
ZSBJbmRleGVkRG91YmxlU3RvcmU6IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgICAgIGF1dG8g
bm90SW50ID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUu
c2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgYXV0byByZWFkeSA9IGppdC5qdW1wKCk7Cisg
ICAgICAgICAgICAgICAgbm90SW50LmxpbmsoJmppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubW92
ZTY0VG9Eb3VibGUoc2NyYXRjaDJHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAg
ICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBS
KSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBq
aXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFn
R1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgcmVhZHku
bGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJv
cGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUo
c3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5j
aElmTm90SW50MzIodmFsdWVSZWdzKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
dmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAg
aml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5k
ZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOwor
ICAgICAgICAgICAgICAgIC8vIFdyaXRlQmFycmllciBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGVt
YmVkZGVyIHNpZGUuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CiAgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICBpc0VtcHR5LmxpbmsoJmppdCk7CisgICAgICAgICAgICAvLyBG
SVhNRTogUHJvZmlsZQorICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xl
U3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8o
c3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZl
Y3Rvckxlbmd0aCgpKSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAgICAgICAg
ICAgIC8vIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwor
ICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVz
dWx0LCAmaml0KTsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVz
ZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZh
aWxBbmRJZ25vcmUubGluaygmaml0KTsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1
c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwogICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTogeworICAgICAgICBB
U1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNo
IHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0
eS4KKworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9UeXBlZEFycmF5VHlwZShtX3R5
cGUpOworCisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7
CisKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSkpOworCisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAg
YXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBz
dGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOwor
ICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaEdQUiwgc3RhdGUuc2NyYXRjaEZQUik7
CisjZWxzZQorICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlSW50c1Rv
RG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUu
c2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAg
ICAgIH0KKworICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAvLyBPdXRPZkJvdW5kcyBiaXQgb2YgQXJyYXlQcm9maWxlIHdpbGwgYmUgc2V0IGluIHRo
ZSBvcGVyYXRpb24gZnVuY3Rpb24uCisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBz
Y3JhdGNoR1BSKSk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRv
cihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAgICAgaWYg
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKQorICAgICAgICAgICAgc2Ny
YXRjaDNHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9IGFs
bG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygKKyAgICAgICAgICAgIGpp
dCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFj
ZSk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBz
Y3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgZmFsc2UpOworCisgICAgICAgIGpp
dC5zaWduRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGlm
IChpc0ludCh0eXBlKSkgeworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIUpTQzo6aXNTaWduZWQodHlwZSkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGluQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFs
LCBzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAg
ICAgICAgICAgIGF1dG8gdG9vQmlnID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRl
clRoYW4sIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7Cisg
ICAgICAgICAgICAgICAgaml0LnhvcjMyKHNjcmF0Y2gzR1BSLCBzY3JhdGNoM0dQUik7CisgICAg
ICAgICAgICAgICAgYXV0byBjbGFtcGVkID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB0
b29CaWcubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweGZmKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGNsYW1w
ZWQubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBpbkJvdW5kcy5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTgoc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUo
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTgodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1l
c1R3bykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NFUlQo
aXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNo
RlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0
eXBlKSkgeworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0
RG91YmxlVG9GbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Zv
dXIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODogeworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1l
c0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAorICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTgzLDYgKzI1MzYsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKICAgICBjYXNlIENoZWNrUHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGln
dW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlOgogICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJh
dGVXaXRoR3VhcmQoKSwgc2luY2UgdGhlIGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8v
IGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRl
KCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNpbmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFy
ZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3MuCkBAIC0yMTk2LDIyICsyNTYyLDMxIEBAIFR5cGVkQXJy
YXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlwZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAg
ICByZXR1cm4gVHlwZUludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVVaW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlSW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQx
NjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjg0LDYgKzI2NTksMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJlZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFj
Y2Vzc0Nhc2UmIHJocykKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAppbmRleCA0MTljOTljOTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJl
Li4xODY0NGFkNTEwZjgwYmJkOTc1MWY4MzY2NzBmZjkwYTkzMTA4NDMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAg
Y2xhc3MgQWNjZXNzQ2FzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNl
PiB7CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xv
YWQsCisgICAgICAgIEluZGV4ZWRJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRDb250aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAg
ICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
LAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVp
bnQ4X3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3Rh
dHVzTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaApp
bmRleCBmYTBhNmQ1MjNiN2FkMGRmODgyMTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAy
NTk2YmY2ZWE4ZmY5YThhNzJiNGRjMmExZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlu
a1N0YXR1czsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5C
eVN0YXR1czsKLWNsYXNzIFB1dEJ5SWRTdGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNz
IERlbGV0ZUJ5U3RhdHVzOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJ
bmZvOwpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3Rh
dHVzKiBjYWxsU3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMg
eyBudWxscHRyIH07CiAgICAgSW5CeVN0YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAg
UHV0QnlJZFN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBw
dXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7
IG51bGxwdHIgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMzYWRk
MWZmZTY2Mjc1ZDkxMTQuLjQ3MTM1MTlkYmE5NGIyMTRmY2U0NTcxMGQ3NmIyMTIzYWZkNzBiNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcApAQCAtMTAyMiw2ICsxMDIyLDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVkU3Ry
aW5nTG9hZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVk
SW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgICAgIG91dC5wcmludCgiSW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91dC5w
cmludCgiSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBvdXQu
cHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDE2
U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJh
eVVpbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlw
ZWRBcnJheUludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQucHJp
bnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAgICAg
ICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBj
MWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRT
dGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgotI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3RhdHVz
VmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpz
aHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1QdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAgICBh
dXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0
ZUZyb21MTEludGAgaW4gYW55IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8g
V2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBj
aGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3Bl
cmF0aW9uIG9uIExMSW50LgotICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0
ZU5hbWU+KCkpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJs
b2NrKTsKLQotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1
Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1
cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYg
KCFuZXdTdHJ1Y3R1cmVJRCkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24p
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAg
QVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0
ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgK
LSAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVj
dHVyZSwgdWlkKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0dXJl
LCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShK
SVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VEX1BB
UkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAg
ICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlkRXhp
dCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0g
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVj
b2RlSW5kZXgpKS5zdHViSW5mbzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVG
b3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlk
LCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAK
LSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFS
QU0obWFwKTsKLSAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNh
bGxFeGl0U2l0ZURhdGEpOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24p
OwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBD
b2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJldHVy
biBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1
YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEo
YmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHViSW5m
b1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxv
Y2stPnZtKCksIHN0dWJJbmZvKTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKLSAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNoIChz
dHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBm
b3Igc29tZSByZWFzb24uCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U6IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAg
ICB9Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAgICAg
IFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAg
ICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFj
Y2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJp
YW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjog
ewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICAg
ICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAg
ICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFj
Y2Vzcy5jb25kaXRpb25TZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAg
ICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0
LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhH
ZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0
U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vz
c0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjYWxs
TGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4
aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNl
dCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAgICAg
IGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJ
Q1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3Rh
Y2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KTsKLSAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29k
ZUluZGV4KTsKLSAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNl
bGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBj
b250ZXh0IDogY29udGV4dFN0YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRl
eHQtPmdldChjb2RlT3JpZ2luKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBbJl0g
KGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAgICAg
ICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlk
LCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAg
ICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAgICAg
IHJldHVybiBiYXNlbGluZVJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChk
aWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC5zbG93VmVyc2lvbigpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAgICAg
IFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAg
ICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1
cy5zdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3Mo
cmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0
dXMpCi0gICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwg
Ynl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQp
Ci17Ci0gICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0gU2lt
cGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYm
IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIGlm
ICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlk
IG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9k
ZQotICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2
YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAgIC8v
IHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc0RlZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VT
ZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7
Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlk
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0
ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAgICAg
ICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRl
ZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9u
LiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20g
dGhlIGNvbmN1cnJlbnQKLSAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlm
IHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5Lgot
ICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBz
bG93IHBhdGguCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwg
b2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZl
IGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAgICAg
ICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBp
dCBtZWFucyB3ZSBhcmUKLSAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3Rh
bGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBwYXRo
IHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAgIGlm
IChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0
aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBp
cyByZWFsbHkKLSAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVj
a3MuCi0gICAgCi0gICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0
aW9uYXJpZXMuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBv
YmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBi
ZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+
dHlwZUluZm8oKS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgQVNT
RVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5
KAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAotICAg
ICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUg
dGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7
Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKLSAgICAKLSAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgK
LSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAgICAg
aWYgKCFkaWRBcHBlbmQpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMo
KSBjb25zdAotewotICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQ
YXRoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1
czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJ
ZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0m
IHZtKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
Ci0gICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6
Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5tX3N0
YXRlID09IE5vSW5mb3JtYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIG1l
cmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFrZXND
YWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0
aCk7Ci0gICAgfTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5m
b3JtYXRpb246Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBs
ZSkKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewotICAg
ICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBN
YWtlc0NhbGxzOgotICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9IFNp
bXBsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJp
YW50cywgc2V0KTsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykKLSAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsK
LSAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0luZm9y
bWF0aW9uOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246
Ci0gICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxpc3RE
dW1wKG1fdmFyaWFudHMpLCAiKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnByaW50
KCIoTWFrZXNDYWxscykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2
MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5o
IgotI2luY2x1ZGUgIkV4aXRGbGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNs
dWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIK
LSNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IENvZGVCbG9jazsKLWNsYXNzIFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1
Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwot
Ci10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3Jp
Z2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1cyBm
aW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBT
dGF0ZSB7Ci0gICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlv
bi4KLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBz
aW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8vIEl0
J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgs
Ci0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCi0g
ICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQotICAg
ICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4
cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9z
dGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAgfQot
ICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5m
b1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1h
dGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6
OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAg
ICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAg
ICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAK
LSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAgICAg
ICA6IG1fc3RhdGUoU2ltcGxlKQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFy
aWFudCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3Rh
dGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVj
dHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVG
aWVsZFB1dEtpbmQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3Rh
dHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBj
b21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBi
YXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwotI2VuZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0g
TWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5SWRT
dGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFudHMo
KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxQ
dXRCeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsg
fQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJh
dG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
LSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQdXRC
eUlkU3RhdHVzJik7Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7
Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRl
OgotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKAotICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0
dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKLSAgICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9z
dGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0
NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2FsbExp
bmtTdGF0dXMuaCIKLSNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
dGhlcikKLSAgICA6IFB1dEJ5SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQot
Ci1QdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeUlk
VmFyaWFudCYgb3RoZXIpCi17Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1fb2xk
U3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBv
dGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0
aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENh
bGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1
dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6
OnRyYW5zaXRpb24oCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVjdHVy
ZSA9IG5ld1N0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlh
bnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xk
U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2Fs
bExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3Ry
dWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNl
SWZOZWNlc3NhcnkoKQotewotICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8
PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAg
ICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1fa2lu
ZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQotYm9v
bCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
IChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAg
IHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAot
ewotICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
IGNhc2UgUmVwbGFjZTogewotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAg
ICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHko
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVy
Lm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFyaWFu
dC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAgICAg
ICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAg
IHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAg
ICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBpZiAo
bV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1
cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBt
ZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9u
U2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAgIGlm
ICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBt
ZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90
aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KSB7Ci0gICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExp
bmtTdGF0dXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2Nv
bmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBt
ZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29u
ZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQo
KSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0aW9u
U2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExp
bmtTdGF0dXMpCi0gICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9j
YWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShv
dGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQotICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9raW5k
ID09IFRyYW5zaXRpb24pOwotICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsK
LSAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJUKCFy
ZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2Nh
dGVzU3RvcmFnZSgpKTsKLSAgICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5
KCkpOwotICAgIAotICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3
ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAotICAg
IC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBh
bHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdlIG5l
ZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHlt
b3JwaGljLgotICAgIAotICAgIGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1
Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6
Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFy
a0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25l
d1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0
QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRl
IHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wg
UHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3RydWN0
dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9u
ZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1f
Y2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi12
b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2Fz
ZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAgICAg
ICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBv
ZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAg
ICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0
byAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNv
bnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29u
dGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIs
IFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0i
KTsKLSAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAg
b3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91dC5w
cmludCgiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwotCi1j
bGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgZW51bSBLaW5kIHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNlLAot
ICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1
dEJ5SWRWYXJpYW50KCkKLSAgICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1fb2Zm
c2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYp
OwotCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0
JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFu
c2l0aW9uKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBz
ZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4pOwotICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0g
Tm90U2V0OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsK
LSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
a2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNl
dHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9s
ZFN0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24g
fHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVy
biBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKLSAg
ICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNz
YXJ5KCk7Ci0KLSAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29sIHJl
YWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0Owot
ICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2Ug
ZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRyaW5z
aWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8vIFRo
aXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVydHlV
bnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1
cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0
YXR1cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0g
ICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJvb2wg
YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAg
ICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0
cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJn
ZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0g
ICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAg
U3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1
cmUgeyBudWxscHRyIH07Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3Rh
dHVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmJjY2E2N2NmMTg2YzQ2YmRh
MDMzMDZiYTA0M2MwNDBmYTdjYTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0
YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJ
Q1N0YXR1c1V0aWxzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRl
ICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlT
dGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQoreworICAg
IHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisK
K3ZvaWQgUHV0QnlTdGF0dXM6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNocmlu
a1RvRml0KCk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50
KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQor
eworICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBpbnN0
cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9ieV92
YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAg
ICAgICAgLy8gV2UgZG8gbm8gaGF2ZSBhIGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1hdGlv
biBmb3IgYG9wX3B1dF9wcml2YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBv
cnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdl
IGhhdmUKKyAgICAgICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExM
SW50LgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVm
YXVsdDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgfQorCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcFB1dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihwcm9m
aWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJlSUQg
c3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3RydWN0
dXJlSUQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChzdHJ1Y3R1cmVJRCk7CisKKyAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFk
YXRhLm1fbmV3U3RydWN0dXJlSUQ7CisgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgIH0K
KworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxl
KCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwor
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OworICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsK
KyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE5vSW5mb3JtYXRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0
cmFuc2l0aW9uKG51bGxwdHIsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IG9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VEX1BB
UkFNKHByb2ZpbGVkQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87CisgICAg
UHV0QnlTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIs
IHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8vIEVOQUJMRShK
SVQpCisgICAgVU5VU0VEX1BBUkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworUHV0QnlTdGF0
dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZv
clN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLAorICAg
ICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIFN0dWJJ
bmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRC
bG9jay0+dm0oKSwgc3R1YkluZm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoc3VtbWFyeSk7CisgICAgCisgICAgc3dpdGNoIChz
dHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBm
b3Igc29tZSByZWFzb24uCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBs
YWNlOiB7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZv
LT5pZGVudGlmaWVyKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlm
aWVyLnVpZCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPQorICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdU
Rk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
Z2V0KCksIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHVi
OiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsK
KyAgICAgICAgCisgICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
c3RhdGUgPSBTaW1wbGU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFj
Y2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlk
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNl
KGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRs
eShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9u
KGFjY2Vzcy5pZGVudGlmaWVyKCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVj
dHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1
bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpTZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0
YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNo
b3VsZFNraXA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1Bh
dGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRl
clNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5r
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFy
aWFudDo6c2V0dGVyKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShj
YWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0
dGVyOgorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1
dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNN
YXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9
IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAg
ICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAor
ICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQ
dXRCeVN0YXR1cyB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3Jp
Z2luKSkgeworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29t
cHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAs
IGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0
ZURhdGEpOworICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykg
eworICAgICAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29k
ZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHVi
SW5mbygKKyAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2Rl
QmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGJsZXNzKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMu
cHV0U3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxp
bmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1
dEtpbmQpCit7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7
CisgICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoKTsKKyAgICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0
dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBz
dHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAg
ICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIElu
IHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRv
IHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlz
RGVmaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0
dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJv
cGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICgh
cmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAg
ICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyBy
ZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5z
IHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5n
IGZpc2h5IGlzCisgICAgICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBj
cmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAg
ICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRo
aXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8g
U28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBs
YWNlKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQg
aW4gc2V0IG1vZGUgYW5kIGl0CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVj
dHVyZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWlu
ZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0
YWtlCisgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBn
ZXRzIGV4ZWN1dGVkLgorICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAg
IC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZv
cmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50
IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUg
cHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21l
dGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAg
Ly8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAg
ICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3Qp
IHsKKyAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAg
ICAgICB9CisgICAgCisgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUs
IHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudChQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0
dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBpZiAoIWRp
ZEFwcGVuZCkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICB9CisgICAgCisgICAgcmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKyNlbmRpZgorCitib29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sK
KyAgICBpZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitQdXRCeVN0YXR1cyBQ
dXRCeVN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBQdXRCeVN0YXR1
cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hl
YWJsZUlkZW50aWZpZXIgUHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBzaW5nbGVJZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3Jl
Z2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFu
dHMpCisgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRl
IHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3Rl
bXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jv
b2wgUHV0QnlTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXpl
KHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikK
K3sKKyAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkgeworICAgICAgICAqdGhpcyA9
IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2Vz
Q2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKKyAgICB9OworICAgIAorICAgIHN3aXRjaCAobV9zdGF0
ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90
aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwor
ICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIu
bV92YXJpYW50cykgeworICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xv
d1BhdGg6CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgUHV0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBp
ZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1
c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJ
Zk5lY2Vzc2FyeSgpOworICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9z
dGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
SW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmlu
dCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNT
bG93UGF0aCkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAg
ICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
U3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iYzJhMWM3M2M4ZjQxY2ExOTJlNThkNGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVz
LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCisjaW5jbHVkZSAiRXhpdEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2lu
Y2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIK
KyNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IENvZGVCbG9jazsKK2NsYXNzIFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1
Y3R1cmU7CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwor
Cit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3Jp
Z2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmlu
YWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3Rh
dGUgeworICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24u
CisgICAgICAgIE5vSW5mb3JtYXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2lt
cGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdz
IGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAor
ICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgorICAg
ICAgICBNYWtlc0NhbGxzCisgICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAg
IDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGlj
aXQgUHV0QnlTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9
PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5
OjpOb0luZm9ybWF0aW9uOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6
CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICBtX3N0
YXRlID0gVGFrZXNTbG93UGF0aDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAg
bV9zdGF0ZSA9IE1ha2VzQ2FsbHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgUHV0
QnlTdGF0dXMoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUo
U2ltcGxlKQorICAgIHsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElD
U3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0Rp
cmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVz
IGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxp
bmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUo
SklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIENvZGVPcmlnaW4pOworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Ns
b3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3Rh
dGUgPT0gTWFrZXNDYWxsczsgfQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIFB1
dEJ5U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0
b3I8UHV0QnlWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRz
OyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRv
cltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBzaW5nbGVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAg
IHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlT
dGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7
CisjZW5kaWYKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxv
Y2sqLCBCeXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3Qg
UHV0QnlWYXJpYW50Jik7CisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRl
IG1fc3RhdGU7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlWYXJpYW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5
YTlmZjI5NDg3YzIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVh
cElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIu
bV9pZGVudGlmaWVyKQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYg
UHV0QnlWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAg
ICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29s
ZFN0cnVjdHVyZTsKKyAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwor
ICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQg
PSBvdGhlci5tX29mZnNldDsKKyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAg
ICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5t
X2NhbGxMaW5rU3RhdHVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBu
dWxscHRyOworICAgIG1faWRlbnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92
ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0
cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICBy
ZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBv
bGRTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwor
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1
dEJ5VmFyaWFudDo6c2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0
KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOworICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAy
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25U
b1JlcGxhY2VJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUu
c2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUo
KTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJl
W2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Cisg
ICAgbV9raW5kID0gUmVwbGFjZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwor
fQorCitib29sIFB1dEJ5VmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0
dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICgh
IW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1faWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1f
aWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAh
PSBvdGhlci5tX29mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxh
Y2U6IHsKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBs
YWNlOiB7CisgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVj
dHVyZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5l
d1ZhcmlhbnQgPSBvdGhlcjsKKyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlz
ID0gbmV3VmFyaWFudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0
dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVy
ZSAhPSBvdGhlci5tX29sZFN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5t
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0
aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlv
blNldDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9
IFNldHRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAg
ICAgIGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlv
blNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwor
ICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRD
b25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRD
b25kaXRpb25TZXQ7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAg
ICAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKKyAgICAgICAgCisgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3Ry
dWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0
QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRC
eVZhcmlhbnQmIHJlcGxhY2UpCit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsK
KyAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zm
c2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1
Y3R1cmVzKCkpOworICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Cisg
ICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAv
LyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBh
bG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0
byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1
cmUgUy4gVGhpcyBkb2Vzbid0CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUg
YW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAg
ICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVy
ZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBs
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAo
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1h
cmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6Zmlu
YWxpemUoVk0mIHZtKQoreworICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZt
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0u
aGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+Zmlu
YWxpemUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
ZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoIjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZp
ZXIsICInLCAiKTsKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAg
ICAgICBvdXQucHJpbnQoImVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgUmVwbGFjZToKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNl
dCgpLCAiLCAiLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJh
bnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIs
IGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAg
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisg
ICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZm
MGY2ODQ1ZWMxYjMxZWI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ2FsbExpbmtTdGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAg
Tm90U2V0LAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBT
ZXR0ZXIKKyAgICB9OworICAgIAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIpCisgICAgICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNl
dChpbnZhbGlkT2Zmc2V0KQorICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV9pZGVudGlmaWVyKFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJp
YW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlW
YXJpYW50IHJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlv
bihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgUHJvcGVydHlPZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4pOworICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90
U2V0OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQor
ICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7
CisgICAgfQorICAgIAorICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCk7CisKKyAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxs
b2NhdGVzU3RvcmFnZSgpIGNvbnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAg
IAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlk
KSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMg
aW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMg
aXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4g
bV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1
cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAg
ICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0
ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghIW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAo
bV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJs
YXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBh
dHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJl
cGxhY2UpOworICAgIAorICAgIEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zm
c2V0OworICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1f
bmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1fY29uZGl0aW9uU2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdk
Mjk0NWQ2MjFhZGMzZWJhZDcuLmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJj
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRT
dGF0dXNlcy5jcHAKQEAgLTYyLDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0
dXNlczo6YWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1
c2VzOjphZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmIHN0YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjph
ZGRQdXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0
YXR1cyYgc3RhdHVzKQogewotICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlk
U3RhdHVzPihzdGF0dXMpOwotICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5n
ZXQoKTsKKyAgICBhdXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1
cyk7CisgICAgUHV0QnlTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRT
dGF0dXNlczo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9y
IChhdXRvJiBwYWlyIDogZ2V0cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOworICAgIGZvciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMp
CiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBkZWxldGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNh
YTg2OGEzMjYzMjRiNS4uOTQ5ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNs
dWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQ
dXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQ
cml2YXRlQnJhbmRTdGF0dXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBA
IHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRk
Q2FsbExpbmtTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7
CiAgICAgR2V0QnlTdGF0dXMqIGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25z
dCBHZXRCeVN0YXR1cyYpOwotICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyog
YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAg
ICAgSW5CeVN0YXR1cyogYWRkSW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5C
eVN0YXR1cyYpOwogICAgIERlbGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgRGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cyogYWRkQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBS
ZWNvcmRlZFN0YXR1c2VzIHsKICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRT
dGF0dXM+Pj4gcHV0czsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5p
cXVlX3B0cjxQdXRCeVN0YXR1cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0
ZXM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXgg
NzU5MThmNjc3MzE4M2NkZmNlYjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUx
MDdhNzAxNmRhODgxYmNlZGY3ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJh
c2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZToKICAgICAgICAgcmVzZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0g
ICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlL
aW5kOjpCeUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFs
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAg
IHJlc2V0SW5CeShjb2RlQmxvY2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDcz
MDRmYjE1NGU4NDBkODVkYTI4ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmUyMjU0MGMwOWJjNzgzZTdk
OGUwNmQ1M2I3Y2E4MDg3MWVlNjcyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xh
c3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRC
eUlkLAogICAgIEdldEJ5VmFsLAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFs
LAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4MjEu
LjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1
cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJl
cygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFz
ZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVy
Z2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0aGlz
U2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSBy
ZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBuZXdT
ZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAsMTAg
KzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8
fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8gcHJp
dmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9k
ZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVj
dHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51
aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAg
ICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgICAg
ICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1Nl
dDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
UHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDog
dmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVy
ZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0
LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDczLDcg
KzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgogICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoK
LSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1Miwx
MCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0g
ICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVy
ZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZp
bHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgx
NWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2
YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0Vs
aW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
QEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYz
ZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNiZDYyN2IuLjdmNDAyZTY5N2Y5ZGEwN2E0
YzU1YWRhNTEyYzQ3OWRjNGYyMjM3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcgKzcz
LDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2YXRl
RmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhw
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVDb2Rl
UGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAg
ICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICAv
LyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0
QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhl
IHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJp
YW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9kZSog
c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlh
bnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2
b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRl
c3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAg
ICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwg
RUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2Rl
KiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwog
ICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1
dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMm
LAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNN
QU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7
CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVGaWVs
ZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00
NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAg
ICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVz
ZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAvLyB0
aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUg
cHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5IHJh
cmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJl
U2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRo
YXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1
dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVu
dC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0
dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdodCBu
b3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0aGlz
IHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVy
ZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1
OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVkVmFs
dWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUp
CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7
CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBs
YWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUo
KSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlh
bnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSog
YmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlz
RGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNt
YU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5
SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFkZFRv
R3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwg
T3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29s
IGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUp
CisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRl
Y29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8
fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRT
dGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5
U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFw
aChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNG
VEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5u
dW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkg
fHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNl
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlz
dFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8fCBw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlmIChw
dXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUs
IHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgoRmls
dGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwg
YmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRz
KCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
c3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9m
ZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52
YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRz
KCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwog
ICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwg
dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlk
U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3Rh
dHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRC
eUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7Cisg
ICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsK
IAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwx
MiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQu
Y29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01
MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6
OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlW
YXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBOb2Rl
KiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVj
dCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJp
dmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3Qg
UHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRl
RmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlv
bnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlz
U2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5u
dW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAg
IGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VP
U1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1
dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0
YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhp
Y0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7
CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2
YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGls
YXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3Rh
dHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlT
dGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAg
ICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRp
UHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFk
ZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsK
KyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAg
ICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRk
VG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0
QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
KTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAg
ICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9yZShi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRC
eUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQo
KSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9
IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3Rh
dHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNl
bGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgo
KSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNv
ZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVz
IG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZv
cm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8g
ZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwg
dGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0g
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlW
YWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29r
U2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5
T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5m
by0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3lt
Ym9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4g
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBp
ZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkp
OworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0g
c3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
dWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1
dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVz
LCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQ
dXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAgICAg
aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5
dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1NiwxMiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgcHV0
QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAgICAg
ICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51
bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3Rh
dHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2Rl
KCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUo
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAK
QEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQ
cm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRCeUlk
U3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAgICAg
ICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwg
UHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmllbGRQ
dXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6OlRh
a2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAh
PSAxCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBd
LnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNv
ZGUubV9zY29wZSksIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtODgxOSw0NSArODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQog
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJl
Y3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9v
bCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3Rh
dHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRl
eCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2Rl
IGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBu
dWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlv
bi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJ
bmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0
aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51
aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5p
c0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKworICAg
ICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVN
YXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCisgICAgICAgIGlm
IChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmll
cigpKSB7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51
aWQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0Nl
bGwoKSkgeworICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNTeW1ib2xDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXVpZC0+aXNTeW1ib2woKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
SWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1
cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
aWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwg
Ynl0ZWNvZGUubV9lY21hTW9kZSk7CisgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRy
dWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAg
ICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2Vj
bWFNb2RlKTsKICAgICB9CiAKICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2
YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2Yz
MGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBA
IC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2
ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcApAQCAtODEsNyArODEsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmlu
ZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0
ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3
IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBk
YXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25s
eVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0
YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1
dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwg
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQog
ICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxk
RWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJh
bnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFw
aC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEy
NjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9y
YWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsK
IAotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApA
QCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIo
KS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAg
ICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0
YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkp
IHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0
YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRp
b24pKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYs
NyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2Up
OworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlz
Tm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBD
b25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5k
bGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRv
IGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0
dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3Rh
dHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3Rh
dHVzKSksCiAgICAgICAgICAgICBFZGdlKGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlk
YjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUx
ODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0y
NDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5kZTRm
MjNmYmFhMGM5NmRiYzhhYWM1MjQ5MTUzZjk4NmUzOThhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI4NjUsNyArMjg2NSw3IEBAIGNsYXNz
IEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIENQVUludHJpbnNpYzoK
ICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CmluZGV4IGE4NDA2OGU3NzQ2YzlkYzQzOTQxZTUxYzhlMzE1ZGE3MzVkZmUwZjMuLjBhYTgwZmYw
NjFhOTZiMGQ1MzVkNjA4ZjBhOTUwODc2MzhmODZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCkBAIC0zODUsOCArMzg1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250
ZXgKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+Z2V0QnlTdGF0dXMoKSk7CiAgICAg
aWYgKG5vZGUtPmhhc0luQnlTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9k
ZS0+aW5CeVN0YXR1cygpKTsKLSAgICBpZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChu
b2RlLT5oYXNQdXRCeVN0YXR1cygpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5w
dXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpLnRvUmF3KCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggOTEwY2YxMzk5
ZmM2YzlkYjFhN2M1NDRmYTFjYTk4YmQyM2NiM2M2OS4uMTJmMjlmMTA3MTU4YWZiMDBjNjU4YTZk
ZjQzOWE3OTE4NDJlODgwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKQEAgLTI1Miw2ICsyNTIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
c1dpdGhUaGlzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5
VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywg
bGlua0J1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIGxpbmtC
dWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIGxpbmtCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBsaW5rQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCmluZGV4IDk2YmZjNWEzMDM5YTM2MGZk
MTBhYTQwOTRmNTcwNjBhN2NkYTlhOTIuLjM2MTc0Nzc4MWZjZDZlNzkxNWU3YTI1OTY4NDY1ZDA3
YjY5MWIyOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
QEAgLTE5OSw2ICsxOTksMTEgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxw
ZXJzIHsKICAgICAgICAgbV9wdXRCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFB1
dEJ5VmFsKGNvbnN0IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9y
KiBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIG1fcHV0QnlWYWxzLmFwcGVuZChJbmxpbmVDYWNo
ZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKKyAgICB9CisK
ICAgICB2b2lkIGFkZERlbEJ5SWQoY29uc3QgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93
UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2RlbEJ5SWRzLmFwcGVu
ZChJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkp
OwpAQCAtMzYwLDYgKzM2NSw3IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVs
cGVycyB7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlWYWxzOwogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJZHM7
CisgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4sIDQ+
IG1fcHV0QnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdl
bmVyYXRvcj4sIDQ+IG1fZGVsQnlJZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxK
SVREZWxCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fZGVsQnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVD
YWNoZVdyYXBwZXI8SklUSW5CeUlkR2VuZXJhdG9yPiwgND4gbV9pbkJ5SWRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggZWM1YThmYjZlYWNlMjlkMzVlZDA1
N2NkNjRmMGQ2ZjQ2NDY2NGQwZi4uMmJkNGFlNDUzNTA0Y2Q2Yjc4ZDhkOTFlMjQ5YjIwZmE3MzBj
M2M4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMDYs
NyArMTA2LDcgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBTdGF0ZVR5cGUmIHN0YXRlKQogICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZs
eToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggYWMyYjRiNWYwMjgzOWM4YWJhYTFkMzli
MzUxZDI3N2ExOWJkMWM5YS4uN2NhYTIwMjAxMmRjYTU4YmRiOTg2OTU4NjQ0NmEyNDhhNThlMzNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFy
aWFudC5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVC
cmFuZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlR5
cGVMb2NhdGlvbi5oIgpAQCAtOTIsNyArOTIsNyBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEg
ewogCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXI7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICBW
ZWN0b3I8UHV0QnlWYXJpYW50LCAyPiB2YXJpYW50czsKICAgICAKICAgICBib29sIHdyaXRlc1N0
cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwpA
QCAtMzIxMCwxNSArMzIxMCwxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29w
SW5mby5hczxJbkJ5U3RhdHVzKj4oKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNQdXRCeUlk
U3RhdHVzKCkKKyAgICBib29sIGhhc1B1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IEZpbHRlclB1dEJ5SWRTdGF0dXM7CisgICAgICAgIHJldHVybiBvcCgpID09IEZp
bHRlclB1dEJ5U3RhdHVzOwogICAgIH0KICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRCeUlk
U3RhdHVzKCkKKyAgICBQdXRCeVN0YXR1cyogcHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGhhc1B1dEJ5SWRTdGF0dXMoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mby5hczxQ
dXRCeUlkU3RhdHVzKj4oKTsKKyAgICAgICAgQVNTRVJUKGhhc1B1dEJ5U3RhdHVzKCkpOworICAg
ICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlTdGF0dXMqPigpOwogICAgIH0KIAogICAgIGJv
b2wgaGFzRGVsZXRlQnlTdGF0dXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCmluZGV4IGU3NWJjZmU4YTFhYzM3MWEwMmU1NjU0OTZiOTg3OGQ5ODdlZTRhZDAuLjlhOTBh
NGNmZGFjOGYyMzUxODI4NzIyNGVkYmVlNWZkODlmNjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTU0Niw3ICs1NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJHZXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZpbHRlckluQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhGaWx0ZXJQdXRCeUlkU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oRmlsdGVyUHV0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0
ZXJEZWxldGVCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAK
aW5kZXggYjFjZmVlOGFjZWMzOGNjMDVhNDE2ZWFiZWJiOWUyMjIzNWUxN2U4Yi4uMjg5NzM3OGJm
OTg1OGIxYzRjZmE2YTMxMTAyOGNiYTBjYmVkZGY2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjE1LDIx
ICsyMTUsNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNh
bGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogCiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0
dGVyQ2FsbDogewotICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09
IG9wX3B1dF9ieV92YWwpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBjb21waWxlIG9wX3B1dF9i
eV92YWwgYXMgUHV0QnlJZCBhbmQgaW5saW5lcyBTZXR0ZXJDYWxsIG9ubHkgd2hlbiB3ZSBmb3Vu
ZCBTdHJ1Y3R1cmVTdHViSW5mbyBmb3IgdGhpcyBvcF9wdXRfYnlfdmFsLgotICAgICAgICAgICAg
ICAgIC8vIEJ1dCBzdGlsbCBpdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGNhbm5vdCBmaW5kIFN0cnVj
dHVyZVN0dWJJbmZvIGhlcmUuIExldCdzIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8u
Ci0gICAgICAgICAgICAgICAgLy8gMS4gQmFzZWxpbmUgQ29kZUJsb2NrIChBKSBpcyBjb21waWxl
ZC4KLSAgICAgICAgICAgICAgICAvLyAyLiAoQSkgZ2V0cyBERkcgKEIpLgotICAgICAgICAgICAg
ICAgIC8vIDMuIFNpbmNlIChBKSBjb2xsZWN0cyBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHB1dF9i
eV92YWwsIChCKSBjYW4gZ2V0IFN0cnVjdHVyZVN0dWJJbmZvIGZyb20gKEEpIGFuZCBjb3BtaWxl
IGl0IGFzIGlubGluZWQgU2V0dGVyIGNhbGwuCi0gICAgICAgICAgICAgICAgLy8gNC4gKEEpJ3Mg
SklURGF0YSBpcyBkZXN0cm95ZWQgc2luY2UgaXQgaXMgbm90IGV4ZWN1dGVkLiBUaGVuLCAoQSkg
YmVjb21lcyBMTEludC4KLSAgICAgICAgICAgICAgICAvLyA1LiBUaGUgQ29kZUJsb2NrIGlubGlu
aW5nIChBKSBnZXRzIE9TUiBleGl0LiBTbyAoQSkgaXMgZXhlY3V0ZWQgYW5kIChBKSBldmVudHVh
bGx5IGdldHMgQmFzZWxpbmUgQ29kZUJsb2NrIGFnYWluLgotICAgICAgICAgICAgICAgIC8vIDYu
IChCKSBnZXRzIE9TUiBleGl0LiAoQikgYXR0ZW1wdHMgdG8gc2VhcmNoIGZvciBTdHJ1Y3R1cmVT
dHViSW5mbyBpbiAoQSkgZm9yIFB1dEJ5SWQgKG9yaWdpbmFsbHksIHB1dF9ieV92YWwpLiBCdXQg
aXQgZG9lcyBub3QgZXhpc3Qgc2luY2UgKEEpJ3MgSklURGF0YSBpcyBjbGVhcmVkIG9uY2UuCi0g
ICAgICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+ZmluZEJ5VmFsSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnlWYWxJbmZvKTsKLSAgICAgICAgICAgICAg
ICBqdW1wVGFyZ2V0ID0gYnlWYWxJbmZvLT5kb25lVGFyZ2V0LnJldGFnZ2VkPEpTRW50cnlQdHJU
YWc+KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwogICAgICAgICAgICAganVtcFRhcmdldCA9
IHN0dWJJbmZvLT5kb25lTG9jYXRpb24ucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCmluZGV4IDY2NzgzNTU1ZGYyMTZkMThmOTBjNTk1NDZlYzc5MmQ1
MGQ4ZmQ1OGEuLjFmNDE4MzE4YTRjMGRlYzZkMmU5OWQ0MDlmNzFkYWZhNDY5N2IyZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlLmNwcApAQCAtMTI1OCw3ICsxMjU4LDcgQEAgY2xhc3MgT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAg
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CkBAIC0yNTU0LDE1ICsyNTU0LDEzIEBAIGNsYXNzIE9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbm9kZXMuIFRob3NlIG5vZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUgYXBwcm9wcmlh
dGUgdHlwZSBjaGVja3MuIFRoaXMgbWVhbnMgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXQgdGhpcyBwb2ludCwgd2UgY2FuIHNpbXBseSB0cnVzdCB0aGF0IHRoZSBpbmNvbWluZyB2
YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB3
aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJlIHVzaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudE9mZnNldCA9IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTZXQuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2V0LmFkZChzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50Ojpy
ZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKQEAgLTI2MTUsNyArMjYx
Myw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBj
YXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCAxNjIyZGQ4YjFiNTIxY2M0MWRmYTg1YWI1
MzI2MmVjZTgwZmU3NGYyLi44OWU1ZWY0ZDg1MWVjOTBkNmQ5ODU1Y2E0N2NhNWJjNzgyNTcyZmZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAgY2xhc3MgUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIFdl
YWtNYXBTZXQ6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAxZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3
MzA0YjljOWE1YTIwLi5kNTQ5NjQ0NTBiNjMyMjc0ODk4ZDY4YzhhOWJlOWY3YTc2Zjk4MWEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzU5
LDcgKzM1OSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUs
IEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIAogICAgIGNhc2Ug
RmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggM2Uz
MjQ3ZjhjNjkyNmQyOTdiNmNhMmNmMTRlMmQ2YjVkOTkzZWI2Yi4uNjAzZmY3YjJlNTJkY2VlZTNi
YzM2NWRiYzRlZTMzYjNjMzdlMWQyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDg4MDhiMTBjODI2YzUx
MDY5Nzk3NDAwOWU5NmYxOTlmYThmMTBhNGMuLmM4ZmMxNTc0MTU5ZDQ0NmNkZWM4OWU4N2NkNzE4
ZDMwYTUyMDE2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcApAQCAtNTg3MSw3ICs1ODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCmluZGV4IDU0MTBkOTA4OTZkYzRmMDEwNTc5MzBkZjgyZjY2MTkyYjgxZjZjMGYuLmM1ZTVj
ZjM2YTc3MGQxNTgzYjY5M2RmZDg4MWQ2NDI0YWIxN2JjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0zMTIsOCArMzEyLDggQEAgY2xhc3MgVmFsaWRh
dGUgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgIXZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
LT5kZmdTaG91bGRXYXRjaCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAK
aW5kZXggZmRhNjRkMzVkYTM0Mjg4OWM3OThjMDUxZTk1NzZlOGExZTMzYTM5Yi4uZjFhMzgwOWQ3
ZWZlMzBmOGQ1OWJhMjFmYWNkMDcwOWU0MzhiOTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC0xOTYs
NyArMTk2LDcgQEAgY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAg
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpAQCAtNDIxLDcgKzQyMSw3IEBAIGNs
YXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBj
YXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmlu
ZGV4IDAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMuLjgzYjUxYmE5Y2Y3
NjVkYTA0NjM3M2E3OWIxY2EwMzMwYzQzYzdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0
dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDVh
M2U5OGY3NTM3MDFkM2IzNGY4NGI5ODA4M2QyNGRhZThlZjcxMDAuLmMzOWYyZGRmMzc1MzYzMWIx
NTI4NTExYWJjOTBlNzFhNTBhMzA3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTE2NDksNyArMTY0OSw3IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAg
ICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC04OTUx
LDcgKzg5NTEsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBWZWN0b3I8U3dpdGNo
Q2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwor
ICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7
IGotLTspIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSk7CiAg
ICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKQEAgLTg5NjYsMTYgKzg5NjYs
MTYgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJs
b2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBl
eGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9
IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07CiAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMu
SlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9w
bGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KAogICAgICAgICAgICAgICAgICAgICBtX29yaWdp
bi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpA
QCAtODk4Nyw3ICs4OTg3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
LT5pbmRleGluZ1R5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNp
dGlvbigpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0
dXJlKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBl
KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgppbmRleCA2OTdkZThkOThmMTlkZTM5ZTQxYzQy
NGFiNTg0MDlmNGY1MTliMDY4Li43OGZkNDk0M2Y5ZWNiYzRjMzVjN2NkY2IzMmI3Mzc3Y2FiOWYx
ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTQxLDcgKzE0
MSw3IEBAIGRlZiBzZWxmLndyaXRlX2J5dGVjb2RlX3N0cnVjdHMoYnl0ZWNvZGVfbGlzdCwgYnl0
ZWNvZGVfc3RydWN0c19maWxlbmFtZSkKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgi
CiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKaW5kZXggZjA0YzFmNDI4ZTEwYmZjNzFmYTVj
ZTM1ZTAwMjg2OGJiNzhhZGVmNi4uOTFiM2IzMTU1MTBkYTY4MjRiM2M5NjM0MTBlMzM2ZDk1ODlh
YmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKQEAgLTY3LDEwICs2NywxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVp
bGRMaXN0KSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZEZp
ZWxkU3RyaWN0T3B0aW1pemUpIFwKICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkUHV0UHJpdmF0
ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRBZGRBY2Nlc3ND
YXNlKSBcCi0gICAgbWFjcm8oUHV0QnlJZFJlcGxhY2VXaXRoSnVtcCkgXAotICAgIG1hY3JvKFB1
dEJ5SWRTZWxmUGF0Y2gpIFwKLSAgICBtYWNybyhJbkJ5SWRTZWxmUGF0Y2gpIFwKKyAgICBtYWNy
byhQdXRCeUFkZEFjY2Vzc0Nhc2UpIFwKKyAgICBtYWNybyhQdXRCeVJlcGxhY2VXaXRoSnVtcCkg
XAorICAgIG1hY3JvKFB1dEJ5U2VsZlBhdGNoKSBcCisgICAgbWFjcm8oSW5CeVNlbGZQYXRjaCkg
XAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhKdW1wKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBs
YWNlV2l0aEdlbmVyaWMpIFwKICAgICBtYWNybyhPcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggYzliMDFjMGQwNWE1ZDZmMGMx
MWQwYTM3MzgxYzJkOThlZmE0NzEzMi4uNTBkZTg1NWI2YWM5MGVlNmQzZDFjOTYxZTQ0ODQ4MjM5
NWE0NjE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNTEwLDYgKzUxMCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgbV9nZXRCeVZhbEluZGV4
ID0gMDsKICAgICBtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID0gMDsKICAgICBtX3B1dEJ5SWRJbmRl
eCA9IDA7CisgICAgbV9wdXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2luQnlJZEluZGV4ID0gMDsK
ICAgICBtX2luQnlWYWxJbmRleCA9IDA7CiAgICAgbV9kZWxCeUlkSW5kZXggPSAwOwpAQCAtNjYy
LDYgKzY2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgUkVM
RUFTRV9BU1NFUlQobV9nZXRCeUlkSW5kZXggPT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggPT0gbV9nZXRCeUlkc1dpdGhUaGlz
LnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlk
cy5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlWYWxJbmRleCA9PSBtX3B1dEJ5
VmFscy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5CeUlkSW5kZXggPT0gbV9pbkJ5
SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9pbnN0YW5jZU9mSW5kZXggPT0gbV9p
bnN0YW5jZU9mcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzSW5kZXggPT0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtOTA5LDYgKzkx
MSw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5
VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNX
aXRoVGhpcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywg
cGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNo
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZm
ZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggNjQ0MGZmMjQxMGYwMzcyZDFiNWZiN2YwNTc3ZmQ3
MGY0OWUyMDU1OC4uMjZhZmZkYTU3YzQwOTViNDkxYWJiNTQxZjI2MjdiMWJmMGE2MWU0NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yMjUsMjggKzIyNSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCku
cHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERp
cmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBq
aXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQotCiAgICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAg
ICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTI2OCwxMCAr
MjQ2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbElu
Zm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5
TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7CiAKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCkBAIC0zODQsMzYgKzM1OCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChS
ZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqKTsK
ICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJh
eVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVj
aWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAgCi0gICAgICAgIEpJVEFycmF5TW9kZSBj
aG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAgICAgICAvLyBQcm9w
ZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNp
bmcgdHlwZS4KLSAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVk
LiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKLSAgICAgICAgLy8gemVyby1leHRlbmRlZC4g
QmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLgotICAg
ICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEludDMyUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbywgSW50MzJTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBEb3VibGVTaGFwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRD
b250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdl
bmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0
IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBCeVZhbEluZm8qLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFw
ZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5m
byopOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJ
bmZvKiwgVHlwZWRBcnJheVR5cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAg
ICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTEw
NjQsNiArMTAwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SklUR2V0QnlW
YWxHZW5lcmF0b3I+IG1fZ2V0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yPiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgICAgIFZlY3RvcjxKSVRQdXRC
eUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRzOworICAgICAgICBWZWN0b3I8SklUUHV0QnlWYWxHZW5l
cmF0b3I+IG1fcHV0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUSW5CeUlkR2VuZXJhdG9yPiBt
X2luQnlJZHM7CiAgICAgICAgIFZlY3RvcjxKSVRJbkJ5VmFsR2VuZXJhdG9yPiBtX2luQnlWYWxz
OwogICAgICAgICBWZWN0b3I8SklURGVsQnlJZEdlbmVyYXRvcj4gbV9kZWxCeUlkczsKQEAgLTEw
OTEsNiArMTAzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5
VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRXaXRoVGhp
c0luZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXggeyBV
SU5UX01BWCB9OworICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9
OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlJZEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAg
dW5zaWduZWQgbV9pbkJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBt
X2RlbEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRleCA2OWJmMWExYzNmOGEx
YTM5MTY5YzZkMzk5YzJiMGM2NzZjODhjZjY0Li5hOTBjODY5ZDM5Nzk5NzZjNmZmYTZlZGQyM2Zj
MzI2MzQ0MmY1OWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRp
ZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtp
bmQgcHV0S2luZCkKLSAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlw
ZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVycywg
YmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQorICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29k
ZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlJ
ZCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQogICAgICAgICAsIG1f
ZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCiB7CkBAIC0z
ODEsNiArMzgxLDY3IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtC
dWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKICAgICAgICAgbV9zdHViSW5m
by0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOwogfQogCitK
SVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSBlY21hTW9k
ZSwgUHV0S2luZCBwdXRLaW5kKQorICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCisgICAgLCBt
X2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCisgICAgLCBtX2Jh
c2UoYmFzZSkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgbV9zdHViSW5mby0+aGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisKKyAgICBtX3N0dWJJbmZvLT5iYXNlR1BSID0gYmFz
ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+cmVncy5wcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZUdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSID0gc3R1YkluZm9HUFI7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5iYXNlVGFnR1BSID0gYmFzZS50
YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwor
ICAgIG1fc3R1YkluZm8tPnYucHJvcGVydHlUYWdHUFIgPSBwcm9wZXJ0eS50YWdHUFIoKTsKKyNl
bmRpZgorfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJiBqaXQpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgeworICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOworICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIH0gZWxzZQorICAgICAgICBtX3Nsb3dQYXRoSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisK
K3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRo
LCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKK3sKKyAgICBCYXNlOjpmaW5hbGl6ZShmYXN0UGF0aCwg
c2xvd1BhdGgsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3Rh
cnQpKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCisgICAgICAgIG1f
c3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
K30KKworVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6c2xvd1Bh
dGhGdW5jdGlvbigpCit7CisgICAgc3dpdGNoIChtX3B1dEtpbmQpIHsKKyAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgaWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICBBU1NFUlQobV9lY21h
TW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQ
cml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldDoKKyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OkpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1
ZVJlZ3MgYnJhbmQsIEdQUlJlZyBzdHViSW5mb0dQUikKICAgICA6IEJhc2UoY29kZUJsb2NrLCBq
aXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0
ZXJzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCmluZGV4IGVlNjgxNDEwMWE4MWViZDE1NWJmNGRiNjkzZmY0N2M4YTI3OGY3
ZmIuLjMwNWI3MGQzZjkyYjFmZTNiNWE2NjdkYjMzNDRiYjY2N2Q2ZmI0NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKQEAg
LTEyOSw5ICsxMjksNyBAQCBjbGFzcyBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAKIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiBwdWJsaWM6Ci0gICAgSklUUHV0QnlJ
ZEdlbmVyYXRvcigpCi0gICAgICAgIDogbV9lY21hTW9kZShFQ01BTW9kZTo6c3RyaWN0KCkpCi0g
ICAgeyB9CisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IoCiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLApAQCAtMTQyLDEwICsxNDAsNDIgQEAgY2xh
c3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsK
ICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIAogcHJpdmF0
ZToKLSAgICBFQ01BTW9kZSBtX2VjbWFNb2RlOworICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBF
Q01BTW9kZTo6c3RyaWN0KCkgfTsKICAgICBQdXRLaW5kIG1fcHV0S2luZDsKIH07CiAKK2NsYXNz
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yIHsKKyAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CitwdWJsaWM6
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvcigKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
CisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVl
UmVncyByZXN1bHQsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNNQU1vZGUsIFB1dEtpbmQpOworCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3Nsb3dQYXRoSnVtcC5tX2p1bXAuaXNTZXQoKSk7CisgICAgICAgIHJldHVy
biBtX3Nsb3dQYXRoSnVtcC5tX2p1bXA7CisgICAgfQorCisgICAgdm9pZCBmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZl
cik7CisKKyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKworICAg
IFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOworCitwcml2YXRlOgor
ICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKKyAgICBQdXRL
aW5kIG1fcHV0S2luZDsKKworICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVlUmVn
cyBtX3ZhbHVlOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CisgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7Cit9OworCiBjbGFzcyBK
SVREZWxCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ciB7CiAgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOwogcHVibGljOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCA3NzQ0YjUwODM3YWVhN2Jh
MDg1YTAxMzQ1ZmJiZjJiNjhiZjBkNDI1Li43N2FmNWIxMzNmNDVmYjExZDQwNWIzNjk5MmJlMGM3
MjgwNjRhMDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMzY0
LDI0ICszNjQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5k
c1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlu
bGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9m
aWxlKQotewotICAgIGF1dG8gYXJyYXlQcm9maWxlU2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlN
b2RlcywgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpIHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9k
ZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAg
ICB9OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVC
bG9jayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJh
eU1vZGVzKGxvY2tlcik7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3Vi
bGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVREb3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmls
ZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEludDMyOwot
ICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQot
ICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwotICAgIHJldHVybiBKSVRDb250aWd1b3Vz
OwotfQotCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggZDI0ZDlmNWVkZjg3MTU4MzhkNzc1YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2
MzI4MWUzNWRmZTU1ZmFlMjA2MTAwYTE1ZGE5NzE5YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQot
ICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGly
ZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6
OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCBy
YXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplYwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0
KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5
SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCBy
YXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7
CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJh
d0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEzLDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAg
ICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsK
KyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlk
LCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmll
bGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAog
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRl
bnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1
YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CisgICAgICAgICAgICBy
ZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVj
dHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwx
NiArOTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNo
aW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAg
ICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBv
bGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRT
bG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkU2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitz
dGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlH
ZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gKmluZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChi
YXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBieVZh
bEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChh
cnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5k
cygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVl
LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiAr
OTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwg
ZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9IAorICAgIH0KKwog
ICAgIGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAg
ICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2Zp
bGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5
S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0
cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRl
bnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5m
by0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUu
cHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3Rh
dGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVj
dCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
aWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0
QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAqbWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0
Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3Rh
dGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IEZBTExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5h
cnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9m
aWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3Rh
dGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdElu
ZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGRO
b3RUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNl
bGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkK
LSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlz
U3RyaWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBn
bG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIz
LDIyNiArMTAxOCwyMDYgQEAgZW51bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdp
dmVVcCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0
YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpT
VmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7Ci0KLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6
aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVl
LmdldE9iamVjdCgpLT5pbmRleGluZ01vZGUoKSkpCi0gICAgICAgIHJldHVybiBPcHRpbWl6YXRp
b25SZXN1bHQ6OkdpdmVVcDsKLQotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChi
YXNlVmFsdWUpOwotCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAh
PSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0
aW5lKTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewot
ICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlN
b2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNv
ZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZh
bChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBp
ZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlw
dC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9i
amVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJD
YWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8s
IFB1dEtpbmQ6Ok5vdERpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50
aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
LmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6R2l2ZVVwOwotICAgIH0KKyAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2Fj
aGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAg
ICAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0
eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29k
ZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSAmJiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNj
cmlwdCkpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbElu
Zm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJs
b2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJ
bmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9
IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNj
ZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
YnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5j
YWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5h
c0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6
b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgYmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0g
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgICAgIHJlcGF0
Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90
RGlyZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJl
c3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1
bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhh
biAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8v
IG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5v
bi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBp
dGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAg
IC8vIHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBz
bG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0g
ICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0K
LQotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1
ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0
aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQg
PT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0
cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
LSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbElu
Zm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAg
ICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisg
ICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2Rl
OjpzdHJpY3QoKSk7CiB9CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUg
c3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBp
dCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAg
ICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6
OnNsb3BweSgpKTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZh
bE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01B
TW9kZSBlY21hTW9kZSkKK3sKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlw
dC5pc0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgp
ICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBK
U09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmICho
YXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVt
cHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0
QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJy
YXlNb2RlUGVybWl0c1B1dERpcmVjdChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbElu
Zm8tPmFycmF5TW9kZSkgeworICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRl
eGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGlmIChzdHVi
SW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7
CisgICAgICAgICAgICBpZiAocHJvZmlsZSkgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFs
SW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQ
dXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXBhdGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0
LCBlY21hTW9kZSk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVk
IHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVk
IGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChv
cHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQp
KSB7CisgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNl
bGwoc3Vic2NyaXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlw
dC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsK
LSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2Rl
QmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6RGlyZWN0LCBieVZhbElu
Zm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nl
c3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBi
eVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNh
Y2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFz
Q2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxv
Y2stPnB1dEJ5SWRDb250ZXh0KCkpOworCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VW
YWx1ZSk7CisgICAgICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2
bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
KworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAg
ICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVy
KSkKKyAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5
S2luZDo6QnlWYWwsIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlv
blJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUg
dGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAg
IC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2Vl
IG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAx
MCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAg
ICAgIC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1
cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAu
Ci0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAg
IH0KKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9i
amVjdCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsK
IAotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBw
cm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlv
blByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
YmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChi
YXNlVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNj
cmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAgICAvLyBEb24ndCBldmVyIHRy
eSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
ICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5m
by0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdl
bmVyaWMpOwotICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0
QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywg
ZWNtYU1vZGUpKTsKKyAgICBkaXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5m
bywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmls
ZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAg
ICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlW
YWxJbmZvLCBlY21hTW9kZSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
c3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxl
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBz
dHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0
KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7Ci0gICAgCisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
KworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVl
LCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9i
amVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBl
Y21hTW9kZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRp
cmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0
LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUq
IHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBh
c09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6
c2xvcHB5KCkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCcmFuZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDI1ODRlOTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgx
ZDVmMTk5OTguLmVmYmQ4ODczNTQyZmMzZjRiZTgzZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywx
NSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5k
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZQogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5m
byosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0UHJpdmF0ZU5hbWVHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQ
cml2YXRlRmllbGRQdXRLaW5kKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7
Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlW
YWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9k
ZSkpOworCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9m
aWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmls
ZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJh
eVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwg
QXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwg
QXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJy
YXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwg
QXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQXJyYXlQcm9maWxlKikpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgRUNNQU1vZGUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0Nh
bGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bExpbmtJbmZvKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAppbmRleCA1NjY4ZGZiZTQxZDEyYTkyMjRhNDNjMDg4MTM0ZTNjYzVjODRjYzdl
Li4wMGU3Njg0NzlkNzA1MjFlM2VlMjNlYzRmNThhNjJkMDQ0NGQ0ZTM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3NyAr
NDM4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2lu
ZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6
IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50
ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJ
c0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBh
dGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdElu
ZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50
MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0g
ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0
X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAg
fQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2Zp
bGUpOwogCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29w
eU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
cmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QzKSwgcmVnVDIsIGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
ZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
KQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZi
eVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0g
ICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5n
U2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRl
eGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQz
MihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsK
LSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7
Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0
b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwot
ICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3Jl
VG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICBy
ZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExp
c3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkp
OwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRU
eXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29y
cmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlT
dG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7
Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQot
ICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdy
aXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0g
ICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNl
czsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjYxLDEyICs1MTUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0
byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYg
KGlzRGlyZWN0KQpAQCAtNjc0LDE2ICs1MzEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02OTQsMjggKzU0OSwyNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
YXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSks
IHByb2ZpbGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChpc0Rp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTcz
NiwxOCArNTg5LDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1l
bnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAg
aml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1
YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVt
cChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQo
KTsKIApAQCAtODA5LDEzICs2NjIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1l
bnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5
R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVl
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUx
LDE0ICs3MDQsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVu
dEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7
CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2Jh
bE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwg
cHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1
dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCkBAIC0zMjkwLDgyICszMTQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZh
bElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2Fj
aGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRE
b3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRz
TGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
QXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0
ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlN
b2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlw
ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0lu
dDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5
LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMK
LSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0
ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1f
Y29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChu
ZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJU
YWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92
ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5j
YWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJl
Y3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0
aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJu
QWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAg
ICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0g
ICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVz
cy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVt
cFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Ns
b3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0
dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5
IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNw
cCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBp
biBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQ
dXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKQEAgLTM0MDcsMjIzICszMTg0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGly
ZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQg
PT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7
Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVt
cExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRL
aW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGlu
ZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93
UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+
ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlv
bkhhbmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxz
KSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAo
Y29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0
ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNh
bGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0
Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRp
bmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJv
cGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+
dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRy
ZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHVi
SW5mbygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJl
dHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRo
aXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5p
dCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3Rl
ZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVy
bkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVj
dD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJ
bnQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1Qw
OwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5
U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAg
ICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVn
aXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgot
ICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
aWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNo
MzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlw
ZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5m
by0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAg
ICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAg
ICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMy
KEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRl
U2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHks
IGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENh
c2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRz
LmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUs
IGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQg
YmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0
aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4K
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVj
dG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIs
IGZhbHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVk
KHR5cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
ZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7
Ci0gICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVt
cCBjbGFtcGVkID0ganVtcCgpOwotICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQu
bGluayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgc3Rv
cmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNP
bmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5
U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwg
QmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUp
Ci17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
ICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAg
UmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3Jh
dGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNl
Ci0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9
IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0g
cmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
bG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3Jy
ZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVB
ZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBl
YXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkp
KTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRP
ZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgp
KTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1w
IGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVy
dEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0g
anVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwg
ZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFs
dWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJy
YW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVh
cmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3Vi
bGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwg
bGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92
ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBy
ZWFkeS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGlu
ZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwot
ICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBs
YXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJp
bWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsK
LSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAg
ICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3Rv
cmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0Zv
dXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShm
cFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4
IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkw
MzEzY2E0YWI3OWQxOTQzZjhjODFkN2YyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25H
ZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQp
IC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQogewotICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAg
ICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7Cisg
ICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAg
ICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAg
ICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBz
d2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
fQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgYXV0byBh
cHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90
ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemUpCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBh
cHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90
ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dp
dGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90
LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNh
c2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNl
dDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7Cisg
ICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0Qnko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDggKzcyMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShz
dHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlL
aW5kLCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEy
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAg
ICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAog
ICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkg
OiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAK
ICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwx
MiArODc2LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQog
Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQor
dm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQ
dXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwogICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0
dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qs
IHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOworfQorCitzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQorewor
ICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVh
cCk7CisKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAg
ICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlw
ZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VU
eXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1w
ZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJp
Z1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoK
KyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhp
bmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhp
bmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3Jl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VT
aGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxs
cHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0
cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNs
YXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1Yklm
TmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwor
fQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21h
TW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUp
CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2lu
ZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBz
bG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERl
bEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCkBAIC05ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVk
Q29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJ
ZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNl
bGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJ
bkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzU2LDI4ICsxODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRC
eShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRC
eUtpbmQga2luCiAgICAgfQogfQogCi12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBr
aW5kKQogewotICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1
bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJn
ZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rp
b25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0
aW9uOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Cisg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0
KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUg
PSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1
bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlv
blR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkK
KyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAK
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1
bmN0aW9uKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8pOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5k
OjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6
QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQogfQogCiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oCmluZGV4IGMxOWYwMmQ0ZDQwMTk1ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYu
LmVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhjZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC00Myw2ICs0MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2lu
ZCB7CiAgICAgUHJpdmF0ZU5hbWVCeUlkLAogfTsKIAorZW51bSBjbGFzcyBQdXRCeUtpbmQgewor
ICAgIEJ5SWQsCisgICAgQnlWYWwsCit9OworCiBlbnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAg
QnlJZCwKICAgICBCeVZhbApAQCAtNTYsNyArNjEsOCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsK
IAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayos
IEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQg
cmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBH
ZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hB
cnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3Zv
aWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3Ry
dWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRl
QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1Zh
bHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3Vu
ZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2
b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSos
IENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7CiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQpOwogdm9pZCByZXNldEluQnkoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJy
YW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2Ix
NTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNiLi43MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEz
MDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAv
LyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9mIGFsaWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBU
aGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3Rh
dHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5jcHApCisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUg
KGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCBy
ZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0aW5nIHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAi
bGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBpbXBsZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2
YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhpcwogLy8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436069</attachid>
            <date>2021-08-21 04:59:46 -0700</date>
            <delta_ts>2021-08-21 05:10:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210821045945.patch</filename>
            <type>text/plain</type>
            <size>296276</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OTQ0MjhiODVhNzdjODkyNDM2YTBjNjlkNTYwNmM0NTJlNWM2Mzc1Li5jZDgzM2RjMGE4NGUxMTdh
NDM0MWM3MjA0ODJjMDNjNWU3MzcyOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDgtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5r
VG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJz
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojpv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJp
YW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQ
dXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFu
dDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlND
OjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwp
OgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAg
KiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZh
bCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVy
YXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZh
bEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmNob29zZUFycmF5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAo
SlNDOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUpOgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjphcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNo
ZVB1dEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEFycmF5UHV0QnlWYWwp
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6cmVwYXRjaFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQp
OiBEZWxldGVkLgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oOgorCiAyMDIxLTA4LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gU2ltcGxpZnkgbW92ZUludHNUb0RvdWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4
OTNiZGM5YzM4MjVmYTdhLi4zMjNkOGE0MGUxZjZlMjNmY2UyN2VkN2MwOGRiNTMyNDczYjI2YTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBG
OTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2
NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0
dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMz
Mjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjND
NiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENB
N0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0
Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzQjRBQTE4Qjky
QzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJp
YW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJE
IC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJB
QkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYw
OUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2
NiwxMSArMjg2NiwxMSBAQAogCQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2
IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYx
NENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRC
eVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5
QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJ
ZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04Njk1LDEwICs4Njk1LDEwIEBACiAJCQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFBy
b3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYxNUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1
dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNEMjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5
SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3Rh
dHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5j
cHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50Lmgg
Ki8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywK
KwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkw
RjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzEx
NEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAy
MkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAgKi8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAw
MjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAqLywKQEAgLTEwNTA2LDggKzEwNTA2LDggQEAK
IAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2
MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2
Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUzMTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkx
ZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0
ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNw
cAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFn
cy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNw
cAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3Bh
Y2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKaW5kZXggZmE4YjZiMjJlM2E0ZTJk
Yzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uYWZmMWNiOWE3MDI4YjllMDBiMDViZjZhMjFlYWU3
Nzk2MmU3YTgzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVmPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgQ2FjaGUKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwcm90b3R5
cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yNzIsNiAr
Mjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2tTa2lwcGlu
Z0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3Vz
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0lk
ZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSW50
MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9vbCBBY2Nlc3NDYXNlOjpuZWVkc1NjcmF0Y2hG
UFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEluZGV4ZWREb3VibGVMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6
CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MTUsNiAr
NTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTY5LDYgKzY0NywxOSBAQCBib29sIEFj
Y2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmtJ
ZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVk
U3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAg
ZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVwbGFjZToKQEAg
LTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vz
c0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CiAKICAgICBjYXNlIE1vZHVsZU5hbWVz
cGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hh
cGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzT3V0
T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0VtcHR5OwotCiAgICAgICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVy
cyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAg
ICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpAQCAtMTIyNywxNiArMTMyOCwxNiBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgcHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAgICAgaml0Lnplcm9F
eHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAg
ICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAg
ICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
ICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gz
R1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5
KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzYzLDIxIEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUg
PT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICAgICAgICAgIGppdC5s
b2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAg
ICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5z
Y3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNo
RlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFs
dWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5j
aElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBl
bmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgICAgIGppdC5t
b3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAg
ICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3Jh
dGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAgICAgICAgICBq
aXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAg
ICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpA
QCAtMTI4NiwxNiArMTM4NywyNzIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0
LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRv
ci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZEln
bm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRp
Z3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTogeworICAgICAg
ICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBz
dWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9w
ZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsK
KworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAg
ICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOworICAgICAg
ICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
LCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGlzT3V0T2ZC
b3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhz
Y3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNlbmRpZgorICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0
YXRlOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAg
ICAgICAgYXV0byBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBw
cmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJh
U3BhY2UpOworICAgICAgICB9OworCisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVS
ZXN1bHQ7CisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7
CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5
U3RvcmFnZVNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygp
OworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0
NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworI2VuZGlmCisKKyAgICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7
CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFz
ZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dpdGNoICht
X3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAgICAgICBl
eHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3RlZFNoYXBl
KSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091dE9mQm91
bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJ
bnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAg
ICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRU
b0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsK
KyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5t
b3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIo
KSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0
ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1
ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRk
ZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGpp
dC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkp
OworICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gy
R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGpp
dC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBq
aXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAg
ICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAg
ICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQorICAgICAgICAgICAg
Ly8gZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAg
ICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVn
aXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOiB7CisgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhh
dCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5Lgor
CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7
CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKwor
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKSk7
CisKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZEln
bm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgIGF1dG8gZG91YmxlQ2FzZSA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7Cisg
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAo
KTsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UubGluaygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90
TnVtYmVyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaEdQUiwgc3RhdGUu
c2NyYXRjaEZQUik7CisjZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBl
bmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIoKSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAg
ICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVS
ZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAgICAgcmVh
ZHkubGluaygmaml0KTsKKyAgICAgICAgfQorCisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIC8vIE91dE9mQm91bmRzIGJpdCBvZiBBcnJheVByb2Zp
bGUgd2lsbCBiZSBzZXQgaW4gdGhlIG9wZXJhdGlvbiBmdW5jdGlvbi4KKyAgICAgICAgc3RhdGUu
ZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlS
ZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoM0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlw
ZSkpCisgICAgICAgICAgICBzY3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRl
IHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNo
aW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3Rh
Y2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkp
LCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdp
Z2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBm
YWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXND
bGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUp
ID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNH
UFIpOworICAgICAgICAgICAgICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpCZWxvd09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIs
IHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgp
OworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7Cisg
ICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91
bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2Fs
bEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJH
UFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJv
dW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsK
KyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRl
LnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0
Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNj
cmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBz
dGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxODMsNiArMjU0
MCwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8g
YmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFy
dCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9k
eSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAg
ICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIg
KzI1NjYsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAg
ICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVp
bnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIy
ODQsNiArMjY2MywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vz
c0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNl
IEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0
YTk2MjExMDUwODk5YmFkZmQ5YmUuLjE4NjQ0YWQ1MTBmODBiYmQ5NzUxZjgzNjY3MGZmOTBhOTMx
MDg0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApA
QCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJM
b2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAg
ICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAg
ICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwK
KyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAg
ICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAK
ICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUzYjg0OTE3
YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0zNiw3ICsz
Niw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgR2V0
QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsKK2NsYXNz
IFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJQ1N0YXR1
cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAgICAgR2V0
QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBpblN0YXR1
cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07
CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxldGVCeVN0
YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEy
ZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDcxMzUxOWRiYTk0YjIxNGZjZTQ1
NzEwZDc2YjIxMjNhZmQ3MGI3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0xMDIyLDYgKzEwMjIsNDUgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZSkKICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOgogICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRTdHJpbmdMb2FkIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkRG91YmxlU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQ29udGlndW91c1N0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIklu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJp
bnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWZhYjlkMzljN2E0
ZWE2ZTYxY2Y1NjQ4YWVmYWM5MGMxZjdjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3Rz
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5o
IgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXR1
c1V0aWxzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1
czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLXsKLSAgICBy
ZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwotfQotCi12
b2lkIFB1dEJ5SWRTdGF0dXM6OnNocmlua1RvRml0KCkKLXsKLSAgICBtX3ZhcmlhbnRzLnNocmlu
a1RvRml0KCk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2Nr
LT52bSgpOwotICAgIAotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLQotICAgIC8vIFdlIGFyZSBu
b3QgeWV0IHVzaW5nIGBjb21wdXRlRnJvbUxMSW50YCBpbiBhbnkgcGxhY2UgZm9yIGBwdXRfcHJp
dmF0ZV9uYW1lYC4KLSAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMg
cmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKLSAgICAvLyBJQyBpbXBs
ZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24gTExJbnQuCi0gICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BQdXRQcml2YXRlTmFtZT4oKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwotCi0gICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQg
PSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwotICAgIGlmICghc3RydWN0dXJlSUQpCi0gICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVy
ZUlEKTsKLQotICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdT
dHJ1Y3R1cmVJRDsKLSAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7Ci0gICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgIH0KLQotICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKLSAgICAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
Ci0gICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgewotICAgICAgICBjb25k
aXRpb25TZXQgPQotICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0
ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAotICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcg
ZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQot
ewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotI2lmIEVOQUJMRShERkdf
SklUKQotICAgIGlmIChkaWRFeGl0KQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAu
Z2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvOwotICAgIFB1dEJ5SWRTdGF0
dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIHN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4LCB1aWQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZSAvLyBFTkFCTEUo
SklUKQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2Vy
LCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSkpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbygKLSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhKQotewotICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86
OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOwotICAgIGlmICghaXNJbmxp
bmVhYmxlKHN1bW1hcnkpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzdW1tYXJ5KTsK
LSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgewotICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIAotICAgIGNhc2Ug
Q2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAg
ICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHVi
OwotICAgICAgICAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNl
JiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogewotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0KLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOwotICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVj
dHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlNldHRlcjogewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbXBs
ZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgp
LCB1aWQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxl
eEdldFN0YXR1cy5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OlNob3VsZFNraXA6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2Vz
U2xvd1BhdGg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3Mu
YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAq
Y2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNv
bXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7Ci0gICAg
ICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVl
U2V0dGVyOgotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRl
cjoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAg
ICB9Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxv
Y2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250
ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQotewotICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwotICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJh
c2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNC
YWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgZm9y
IChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKLSAgICAgICAgSUNT
dGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOwotICAgICAgICAKLSAgICAg
ICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlJZFN0YXR1cyYgcmVzdWx0KSAtPiBQdXRC
eUlkU3RhdHVzIHsKLSAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmln
aW4pKSB7Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNv
bXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFw
LCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxF
eGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5zdHVi
SW5mbykgewotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRp
bWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0
ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGlt
aXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKLSAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVz
LnB1dFN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5l
QmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsIGNhbGxFeGl0
U2l0ZURhdGEpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCkKLXsKLSAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICBpZiAoc2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKLSAgICAKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNl
dC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9i
YWxPYmplY3RUeXBlKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgIAotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMp
OwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRl
TmFtZUJ5SWRgIGRlZmluZSBtb2RlCi0gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBh
cmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0
YWtlIAotICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KLSAgICAg
ICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KLSAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCi0gICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAotICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCi0gICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNl
dCBtb2RlIGFuZCBpdAotICAgICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQotICAgICAgICAvLyB0cnlpbmcgdG8g
c3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQot
ICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBl
eGVjdXRlZC4KLSAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8v
IE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUg
d2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQotICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRv
IGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KLSAgICAKLSAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0
IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0
aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQotICAgICAgICAv
LyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCi0gICAg
ICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7Ci0g
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNl
dHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCB1aWQpOwotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwot
ICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMg
YWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KLSAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1
cmUsIHVpZCwgMCwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIEFTU0VSVChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIAotICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJl
c3VsdC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQs
IG9mZnNldCkpOwotICAgICAgICBpZiAoIWRpZEFwcGVuZCkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0KLSAgICAKLSAgICByZXN1bHQuc2hy
aW5rVG9GaXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgUHV0QnlJ
ZFN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RhdGUgPT0gTWFrZXND
YWxscykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKG1fc3RhdGUgIT0gU2lt
cGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFr
ZXNDYWxscygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFr
ZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgotdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2
YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQg
UHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlk
U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpIHsKLSAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgUHV0QnlJZFN0YXR1czo6bWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYgb3RoZXIpCi17
Ci0gICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZdICgpIHsKLSAgICAgICAgKnRoaXMgPSBQ
dXRCeUlkU3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2Vz
Q2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLSAgICB9OwotICAgIAotICAgIHN3aXRjaCAobV9zdGF0
ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgaWYgKG90
aGVyLm1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIgOiBvdGhl
ci5tX3ZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgfQotICAgICAgICBz
aHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNT
bG93UGF0aDoKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIHJldHVybiBtZXJnZVNsb3co
KTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBQdXRCeUlkU3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCi17Ci0g
ICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1cm47Ci0gICAgZmlsdGVySUNT
dGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1Jl
cGxhY2VJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKLSAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAg
b3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgICAgICBvdXQucHJpbnQo
IihUYWtlc1Nsb3dQYXRoKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBNYWtlc0NhbGxz
OgotICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4ZTI1MmRiNjlhYzU3
MTNkYzhlOGY4YjY0NDAwMGNhZTYzMGIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiRXhpdEZsYWcuaCIKLSNpbmNsdWRlICJJ
Q1N0YXR1c01hcC5oIgotI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07Ci1jbGFzcyBKU0dsb2Jh
bE9iamVjdDsKLWNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIFN0cnVjdHVyZUNoYWluOwotY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87Ci0KLXR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOwotCi1j
bGFzcyBQdXRCeUlkU3RhdHVzIGZpbmFsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3
ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgotICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAv
LyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCi0gICAgICAgIFNp
bXBsZSwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KLSAg
ICAgICAgVGFrZXNTbG93UGF0aCwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhz
IHRoYXQgbWFrZSBjYWxscy4KLSAgICAgICAgTWFrZXNDYWxscwotICAgIH07Ci0gICAgCi0gICAg
UHV0QnlJZFN0YXR1cygpCi0gICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKLSAg
ICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdHVi
SW5mb1N1bW1hcnkgc3VtbWFyeSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgewot
ICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKLSAgICAgICAgICAg
IG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBj
YXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFy
eTo6TWFrZXNDYWxsczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtl
c1Nsb3dQYXRoOgotICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRo
QW5kTWFrZXNDYWxsczoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQpCi0gICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCi0gICAgewotICAgICAgICBt
X3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9v
bCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFw
JiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9y
aWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0jZW5kaWYKLSAgICAKLSAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICAKLSAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KLSAg
ICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KLSAg
ICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xv
d1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkg
Y29uc3Q7Ci0gICAgUHV0QnlJZFN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OwotICAgIAotICAg
IHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhbnRzOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KLSAgICBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFy
a0lmQ2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2
b2lkIG1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKLSAgICAKLSAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKLSAgICAKLXByaXZhdGU6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJ
ZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0jZW5kaWYKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVj
b2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotICAgIAotICAgIGJvb2wgYXBwZW5k
VmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsK
LSAgICAKLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4g
bV92YXJpYW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI0NTRkNjQ3ODJhOTY0MzkzMDlhZTlhMWZhMDQ4YTM4NzI1NTIxZjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50Lmgi
Ci0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIDogUHV0QnlJZFZhcmlhbnQoKQotewotICAg
ICp0aGlzID0gb3RoZXI7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBtX2tpbmQgPSBvdGhl
ci5tX2tpbmQ7Ci0gICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKLSAg
ICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uZGl0aW9u
U2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7Ci0gICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNl
dDsKLSAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgbV9jYWxsTGlua1N0
YXR1cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uo
Ci0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFJl
cGxhY2U7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3Vs
dC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Ci0gICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNl
dHRlcigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykK
LXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFNldHRl
cjsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKLSAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cnVjdHVyZSogUHV0QnlJZFZhcmlhbnQ6Om9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKGtp
bmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5z
aXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVb
aV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RydWN0dXJlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmZp
eFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKGtpbmQoKSAhPSBU
cmFuc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9v
bGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
b2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX25ld1N0cnVjdHVyZSA9
IG51bGxwdHI7Ci0gICAgbV9raW5kID0gUmVwbGFjZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExp
bmtTdGF0dXMpOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6cmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
bWFrZXNDYWxscygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Ci19Ci0K
LWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKLXsKLSAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBOb3RTZXQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJU
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKLSAgICAg
ICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KCp0aGlzKSkgewotICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2Fz
ZSBSZXBsYWNlOgotICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKG90aGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKLSAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVjdHVy
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICgh
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VkQ29uZGl0
aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBjYXNlIFNldHRl
cjogewotICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKLSAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtTdGF0
dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1l
cmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFtZXJnZWRD
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJh
c2VDb25kaXRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKQot
ewotICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7Ci0gICAgQVNTRVJUKHJlcGxhY2Uu
bV9raW5kID09IFJlcGxhY2UpOwotICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zm
c2V0KTsKLSAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKLSAgICBBU1NF
UlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOwotICAgIEFTU0VSVChyZXBsYWNlLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdp
bmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEg
bmV3IGZpZWxkIHdoaWNoCi0gICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUg
dGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAot
ICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSBy
ZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCi0gICAgCi0gICAgaWYgKHJlYWxsb2NhdGVzU3Rv
cmFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHJlcGxhY2UubV9v
bGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1
cmUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgot
dm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUpCi0gICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0K
LQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xv
dFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQotewot
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91
dCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
IChraW5kKCkpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOgotICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgb3V0
LnByaW50KAotICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCi0gICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAi
LCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOgotICAg
ICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRp
b25TZXQsIGNvbnRleHQpLCAiXSIpOwotICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwg
bV9vZmZzZXQpOwotICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3Rh
dHVzKTsKLSAgICAgICAgb3V0LnByaW50KCI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWE3M2EyZjhkNGI1ZTVmMGEx
ZGU0MDhhNWZiYmQxY2I3YWIyNTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
Q2FsbExpbmtTdGF0dXM7Ci0KLWNsYXNzIFB1dEJ5SWRWYXJpYW50IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIEtpbmQgewotICAgICAgICBOb3RTZXQs
Ci0gICAgICAgIFJlcGxhY2UsCi0gICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFNldHRlcgot
ICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoKQotICAgICAgICA6IG1fa2luZChOb3RT
ZXQpCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX25ld1N0
cnVjdHVyZShudWxscHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0KLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFj
ZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3Rh
dGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0Jiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7Ci0gICAgCi0gICAgS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8
IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAg
fQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVw
bGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJl
OwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAot
ICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0
dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpIGNvbnN0OwotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgICAg
IHJldHVybiBtX25ld1N0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhUcmFuc2l0
aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLQotICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygp
IGNvbnN0OwotICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBt
YWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0g
ICAgCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3
b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBo
ZWxwZXJzLgotICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJp
bnNpYzsgfQotCi0gICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgot
ICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAgICB9Ci0gICAgCi0gICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7
Ci0gICAgfQotCi0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYg
b3RoZXIpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lm
Q2hlYXAoVmlzaXRvciYpOwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBQ
dXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0
KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiByZXBsYWNlKTsKLSAgICAKLSAgICBLaW5kIG1fa2luZDsKLSAgICBQcm9wZXJ0eU9m
ZnNldCBtX29mZnNldDsKLSAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgU3Ry
dWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsKLSAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ2YmNjYTY3Y2YxODZjNDZiZGEwMzMwNmJhMDQzYzA0MGZhN2NhMDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCkBAIC0w
LDAgKzEsNTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCisK
KyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworYm9vbCBQdXRCeVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlh
bnQmIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3Zhcmlh
bnRzLCB2YXJpYW50KTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQoKQorewor
ICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsK
KyAgICAKKyAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpKSB7CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgY2FzZSBvcF9w
dXRfcHJpdmF0ZV9uYW1lOgorICAgICAgICAvLyBXZSBkbyBubyBoYXZlIGEgY29kZSByZXRyaWV2
aW5nIExMSW50IGluZm9ybWF0aW9uIGZvciBgb3BfcHV0X3ByaXZhdGVfbmFtZWAuCisgICAgICAg
IC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1
cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQorICAgICAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3Ig
dGhpcyBvcGVyYXRpb24gb24gTExJbnQuCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50aWZpZXIgPSAmKHByb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7
CisKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJl
SUQ7CisgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKKworICAgIFN0cnVjdHVyZUlEIG5l
d1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIW5ld1N0
cnVjdHVyZUlEKSB7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
KQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBzdHJ1Y3R1
cmUsIG9mZnNldCk7CisgICAgfQorCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOworICAgIAorICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgaWYgKCEoYnl0ZWNvZGUubV9m
bGFncy5pc0RpcmVjdCgpKSkgeworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAg
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAg
ICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJl
LCB1aWQpOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24obnVsbHB0ciwgc3RydWN0dXJlLCBuZXdTdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKK30KKworI2lmIEVOQUJMRShKSVQpCitQdXRC
eVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcg
ZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQor
eworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
KyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkaWRFeGl0KQor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5k
ZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1Yklu
Zm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIGNhbGxFeGl0U2l0
ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTElu
dChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURfUEFSQU0obWFwKTsKKyAgICBVTlVT
RURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwor
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorewor
ICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgYmFzZWxpbmVC
bG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0
ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5m
bzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7CisgICAgaWYgKCFpc0lu
bGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhzdW1tYXJ5KTsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgeworICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAKKyAgICBjYXNlIENh
Y2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKKyAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVp
ZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICBzdHViSW5m
by0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3Qg
PSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAo
YWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9s
eVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vz
cy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogeworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewor
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRC
eVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZpZXIoKSwgYWNjZXNzLnN0cnVjdHVy
ZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogeworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9
IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCksIGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
c3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
Q29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdl
dFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYXV0
byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3Ry
dWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRp
dGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1
c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhN
YWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgIH0K
K30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNl
bGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNr
JiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBDYWxs
TGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAg
ICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBi
eXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29u
dGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2Rl
T3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5
U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVzIHsKKyAgICAgICAgICAgIGlmICghY29udGV4
dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMg
YmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1
bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlu
bGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAgICAgICBQdXRCeVN0YXR1cyByZXN1bHQ7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNv
bnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVE
YXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gYmxlc3Mo
KnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY29tcHV0ZUZvcihi
YXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4
aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1
dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKKyAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgaWYgKHNldC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cygpOworICAgIAorICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1f
c3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7
ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RU
eXBlKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisg
ICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUg
YSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVm
aW5lIG1vZGUKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5n
IGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCisgICAgICAg
ICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgorICAgICAgICAgICAgaWYgKHBy
aXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNl
U2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQp
OworICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxp
ZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVh
dGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAg
ICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0
ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBv
bi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9t
IHRoZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBp
ZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4K
KyAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ug
c2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQg
PSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwgc3RydWN0dXJlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRo
IFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKKyAgICAgICAgLy8gc2hvdWxk
IG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBh
cmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRl
IGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4
Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisgICAgICAgIGlmIChwcml2YXRlRmll
bGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2lu
ZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5CisgICAg
ICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgorICAgIAorICAg
ICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgorICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBJZiB0aGUgc3RydWN0dXJl
IGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBnaXZl
IHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0
aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3RydWN0dXJlLT50eXBlSW5mbygpLmlzT2Jq
ZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkpOworICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gV2Ugb25seSBvcHRp
bWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24g
aXMgY2FjaGVkIHRvLgorICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAg
ICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29u
Y3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAgICBpZiAoIXRyYW5z
aXRpb24pCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIAorICAgICAgICBib29s
IGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bihpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0
KSk7CisgICAgICAgIGlmICghZGlkQXBwZW5kKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAgICByZXN1bHQuc2hyaW5rVG9GaXQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK2Jvb2wgUHV0QnlTdGF0dXM6Om1h
a2VzQ2FsbHMoKSBjb25zdAoreworICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Ns
b3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQdXRCeVN0YXR1czo6c2luZ2xlSWRl
bnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmdsZUlkZW50aWZpZXJGb3JJQ1N0YXR1
cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0
QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZv
ciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JFR0FURShQdXRC
eVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVz
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQorewor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgeworICAgICAgICBp
ZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6bWVyZ2UoY29uc3Qg
UHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3Jt
YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAo
KSB7CisgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5t
YWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOworICAgIH07CisgICAg
CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAg
ICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2lt
cGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7CisgICAgICAgICAgICBpZiAoIWFwcGVu
ZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAg
ICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAg
IHJldHVybiBtZXJnZVNsb3coKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKKyAgICBmb3Ig
KFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQuZml4
VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgaWYgKG1fdmFyaWFudHMuaXNF
bXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKK30KKwordm9pZCBQdXRC
eVN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9z
dGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCIoTm9J
bmZvcm1hdGlvbikiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNpbXBs
ZToKKyAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgICAg
ICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIihNYWtlc0NhbGxzKSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMmExYzczYzhmNDFjYTE5MmU1OGQ0YmUx
ZGUxNjYxM2Q5MDAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJFeGl0RmxhZy5oIgorI2luY2x1ZGUg
IklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1
ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVk07CitjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0cnVjdHVyZUNoYWluOworY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOworCitj
bGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2Ug
aGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgLy8g
SXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgorICAgICAgICBTaW1w
bGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCisgICAg
ICAgIFRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBwYXRocyB0
aGF0IG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMKKyAgICB9OworICAgIAorICAgIFB1
dEJ5U3RhdHVzKCkKKyAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCisgICAgeworICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAg
OiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZv
cm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0Nh
bGxzKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3R1YkluZm9TdW1t
YXJ5IHN1bW1hcnkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKKyAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgICAgICBtX3N0YXRl
ID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2Vz
Q2FsbHM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0
aDoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2Vz
Q2FsbHM6CisgICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQp
CisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAgeworICAgICAgICBtX3ZhcmlhbnRzLmFw
cGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1
dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBFeGl0RmxhZywg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNv
bXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKKyAgICAKKyAg
ICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smLCBDb2RlT3Jp
Z2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbik7CisjZW5kaWYKKyAgICAKKyAg
ICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICAKKyAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9CisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247
IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7
IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRh
a2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9CisgICAgYm9vbCBtYWtlc0Nh
bGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKKyAgICAK
KyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUo
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBQ
dXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNpbmdsZUlkZW50aWZpZXIoKSBjb25z
dDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFs
aXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeVN0YXR1cyYpOworICAg
IAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyNpZiBFTkFCTEUoSklU
KQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21w
dXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIGJvb2wg
YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICB2b2lkIHNocmlua1RvRml0
KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50LCAx
PiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwN2M1MzVi
Mzc0MDQ4MTA5ZTY5YzkwYWQ4YzlhOWZmMjk0ODdjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApAQCAtMCwwICsxLDMz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKworI2luY2x1
ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0
dXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUHV0
QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICA6
IFB1dEJ5VmFyaWFudChvdGhlci5tX2lkZW50aWZpZXIpCit7CisgICAgKnRoaXMgPSBvdGhlcjsK
K30KKworUHV0QnlWYXJpYW50JiBQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeVZh
cmlhbnQmIG90aGVyKQoreworICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKKyAgICBtX29sZFN0
cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOworICAgIG1fbmV3U3RydWN0dXJlID0gb3Ro
ZXIubV9uZXdTdHJ1Y3R1cmU7CisgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlv
blNldDsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIGlmIChvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAg
bV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgbV9pZGVudGlmaWVyID0gb3RoZXIubV9p
ZGVudGlmaWVyOworICAgIHJldHVybiAqdGhpczsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFy
aWFudDo6cmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlW
YXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0g
UmVwbGFjZTsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFy
aWFudCBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUo
aWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOworICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQoreworICAg
IFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1f
a2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Cisg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29m
ZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2Fs
bExpbmtTdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSogUHV0QnlW
YXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRT
dHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0
dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xk
U3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQor
ICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFB1dEJ5VmFy
aWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoa2lu
ZCgpICE9IFRyYW5zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fbmV3U3Ry
dWN0dXJlID0gbnVsbHB0cjsKKyAgICBtX2tpbmQgPSBSZXBsYWNlOworICAgIG1fY29uZGl0aW9u
U2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bV9jYWxsTGlua1N0YXR1cyk7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1
cmVzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlv
bjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OnJl
YWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBj
YXNlIFRyYW5zaXRpb246CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCk7CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50
OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKK30K
KworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFyaWFudCYg
b3RoZXIpCit7CisgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlmaWVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9pZGVudGlmaWVyICYmIChtX2lk
ZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkg
eworICAgICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1l
cmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAg
ICAgICBQdXRCeVZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOworICAgICAgICAgICAgaWYgKG5l
d1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7Cisg
ICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6Cisg
ICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3Ro
ZXIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAg
ICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0dXJlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbmV3
U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNl
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2Nv
bmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29uZGl0aW9u
U2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOiB7CisgICAgICAg
IGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlu
a1N0YXR1cykgeworICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5t
X2NhbGxMaW5rU3RhdHVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3Ro
ZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0
aW9uU2V0OworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhl
ci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5p
c1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2Nv
bmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgCisgICAgICAgIGlmICht
X2NhbGxMaW5rU3RhdHVzKQorICAgICAgICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICAKKyAgICAgICAgbV9vbGRTdHJ1Y3R1cmUu
bWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldp
dGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSkKK3sKKyAgICBBU1NFUlQobV9r
aW5kID09IFRyYW5zaXRpb24pOworICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNl
KTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CisgICAgQVNTRVJU
KCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7CisgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxs
b2NhdGVzU3RvcmFnZSgpKTsKKyAgICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpOworICAgIAorICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hl
biB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAor
ICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdh
cyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyB3b3JrIGlmIHdl
IG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBv
bHltb3JwaGljLgorICAgIAorICAgIGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlT
dHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50
Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2lkZW50aWZp
ZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUo
UHV0QnlWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlW
YXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1fb2xkU3RydWN0
dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChtX25ld1N0cnVjdHVyZSkKKyAgICAg
ICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2
b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVt
cGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCit7CisgICAgaWYgKCFtX29sZFN0cnVj
dHVyZS5pc1N0aWxsQWxpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
bmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKHZt
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYmICFt
X2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK3Zv
aWQgUHV0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPCIpOworICAgIG91dC5wcmlu
dCgiaWQ9JyIsIG1faWRlbnRpZmllciwgIicsICIpOworICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiZW1wdHk+Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoCisg
ICAgICAgICAgICAiUmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
Iiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAg
ICAgICAiVHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiB0byAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KAor
ICAgICAgICAgICAgIlNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSIpOworICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgICAg
ICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgb3V0
LnByaW50KCI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTQw
MmI0MjU2YWRlN2UwNTY1MGE5ZmYwZjY4NDVlYzFiMzFlYjRhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCkBAIC0wLDAgKzEs
MTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
IgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua1N0YXR1czsKKworY2xhc3MgUHV0
QnlWYXJpYW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
bnVtIEtpbmQgeworICAgICAgICBOb3RTZXQsCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIFRy
YW5zaXRpb24sCisgICAgICAgIFNldHRlcgorICAgIH07CisgICAgCisgICAgUHV0QnlWYXJpYW50
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICAgICAgOiBtX2tpbmQoTm90U2V0
KQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAgICAgICwgbV9uZXdTdHJ1
Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX2lkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVy
KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlh
bnQmKTsKKyAgICBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeVZhcmlhbnQmKTsK
KworICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgcmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgCisgICAgc3RhdGljIFB1
dEJ5VmFyaWFudCB0cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgCisgICAgc3RhdGlj
IFB1dEJ5VmFyaWFudCBzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CisgICAgCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtp
bmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQor
ICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFj
ZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwor
ICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNp
dGlvbigpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJl
dHVybiBtX25ld1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhUcmFuc2l0aW9u
VG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNv
bnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CisgICAgYm9vbCBtYWtl
c0NhbGxzKCkgY29uc3Q7CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAg
CisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3b3Vs
ZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxw
ZXJzLgorICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJpbnNp
YzsgfQorCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAg
IGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAgQ2FsbExpbmtT
dGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7Cisg
ICAgfQorCisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVy
KTsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFs
aXplKFZNJik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKwor
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlm
aWVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtX2lkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
c3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNv
bnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSk7CisgICAgCisgICAgS2luZCBtX2tpbmQ7CisgICAg
UHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJl
OworICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOworICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKaW5kZXggMGM0
YzA3NDdhMGFiODVmYjNhZjgxN2QyOTQ1ZDYyMWFkYzNlYmFkNy4uZmNlMGY0ZDhlZTEwZWRkYmNm
M2M3NTRlZjgzM2EzNWJlOTdkYmMxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcApAQCAtNjIsMTAgKzYyLDEwIEBAIEdldEJ5
U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRHZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luLCBjb25zCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLVB1dEJ5SWRT
dGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlJZFN0YXR1cyYgc3RhdHVzKQorUHV0QnlTdGF0dXMq
IFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4sIGNvbnN0IFB1dEJ5U3RhdHVzJiBzdGF0dXMpCiB7Ci0gICAgYXV0byBzdGF0dXNQdHIg
PSBtYWtlVW5pcXVlPFB1dEJ5SWRTdGF0dXM+KHN0YXR1cyk7Ci0gICAgUHV0QnlJZFN0YXR1cyog
cmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOworICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1
ZTxQdXRCeVN0YXR1cz4oc3RhdHVzKTsKKyAgICBQdXRCeVN0YXR1cyogcmVzdWx0ID0gc3RhdHVz
UHRyLmdldCgpOwogICAgIHB1dHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvZGVPcmlnaW4sIFdU
Rk1vdmUoc3RhdHVzUHRyKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDcsNiArMTA3
LDggQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcHV0
cykKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZv
ciAoYXV0byYgcGFpciA6IGlucykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0ZXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAppbmRleCBiZDE1NzA1
NDU3MzgwYzM3N2I4NDI4NmQ1M2FhODY4YTMyNjMyNGI1Li45NDk4M2RiYzc2N2QwN2UyODA0YmQ0
NDJjMzdlYjU0Y2Y0NTdiYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEZWxl
dGVCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiSW5CeVN0
YXR1cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1
cy5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIAogICAg
IENhbGxMaW5rU3RhdHVzKiBhZGRDYWxsTGlua1N0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29u
c3QgQ2FsbExpbmtTdGF0dXMmKTsKICAgICBHZXRCeVN0YXR1cyogYWRkR2V0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IEdldEJ5U3RhdHVzJik7Ci0gICAgUHV0QnlJZFN0YXR1cyog
YWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlJZFN0YXR1cyYp
OworICAgIFB1dEJ5U3RhdHVzKiBhZGRQdXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29u
c3QgUHV0QnlTdGF0dXMmKTsKICAgICBJbkJ5U3RhdHVzKiBhZGRJbkJ5U3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mLCBjb25zdCBJbkJ5U3RhdHVzJik7CiAgICAgRGVsZXRlQnlTdGF0dXMqIGFkZERl
bGV0ZUJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBEZWxldGVCeVN0YXR1cyYpOwog
ICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMmKTsKQEAgLTc2
LDcgKzc2LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIAogICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPj4+IGNh
bGxzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPEdl
dEJ5U3RhdHVzPj4+IGdldHM7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6
OnVuaXF1ZV9wdHI8UHV0QnlJZFN0YXR1cz4+PiBwdXRzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5U3RhdHVzPj4+IHB1dHM7CiAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8SW5CeVN0YXR1cz4+PiBp
bnM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8RGVs
ZXRlQnlTdGF0dXM+Pj4gZGVsZXRlczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxDaGVja1ByaXZhdGVCcmFuZFN0YXR1cz4+PiBjaGVja1ByaXZhdGVC
cmFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAppbmRleCA3NTkxOGY2NzczMTgzY2RmY2ViMjNkYzNjYzIxZDMyN2U5ZmEx
ODY4Li5mMjdiNzM3NGVmOWFlZTEwN2E3MDE2ZGE4ODFiY2VkZjc4MTlkNDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
QEAgLTI4MSw4ICsyODEsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGMKICAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAgICByZXNldEdldEJ5KGNvZGVCbG9jaywg
KnRoaXMsIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dDoKLSAgICAgICAgcmVzZXRQdXRCeUlEKGNvZGVCbG9jaywgKnRoaXMp
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRo
aXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKICAgICAgICAgcmVzZXRJbkJ5KGNvZGVCbG9jaywgKnRoaXMsIEluQnlLaW5k
OjpCeUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKaW5kZXggNzMwNGZiMTU0ZTg0MGQ4NWRhMjhlNmUyNTAxYWFiMThlNTVkNDFh
NC4uZTIyNTQwYzA5YmM3ODNlN2Q4ZTA2ZDUzYjdjYTgwODcxZWU2NzIyNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKQEAgLTU0
LDcgKzU0LDggQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeUlk
RGlyZWN0LAogICAgIFRyeUdldEJ5SWQsCiAgICAgR2V0QnlWYWwsCi0gICAgUHV0LAorICAgIFB1
dEJ5SWQsCisgICAgUHV0QnlWYWwsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFz
UHJpdmF0ZU5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZDFjMGI0NmE2YTkwNzM5MDM1OWRk
MzBjMGNlNjhjMTFjMTdiMjgyMS4uMDdjMmQxZjM1ZGIyZjU5NDYxYTQ5NzQ5NWEzZmEyYzc0NDZj
NzdhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkpT
UHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUg
Ik51bWJlckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1
ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC0z
OTczLDcgKzM5NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgZGlk
Rm9sZENsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+
bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGNvbnN0IFB1
dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07CiAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IHRoaXNTZXQgPSAqbV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAg
ICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHko
KSkKQEAgLTM5ODIsNyArMzk4Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CiAgICAgICAgICAg
ICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsK
KyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHRoaXNTZXQub25seVN0cnVjdHVyZSgpICE9IG5ld1N0cnVjdHVyZSkg
ewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0zOTkwLDcgKzM5
OTAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIH0gLy8gZWxz
ZSB0aGlzIGlzIHJlYWxseSBhIHJlcGxhY2UuCiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChu
ZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwog
ICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtNDE0MCwxMCArNDE0MCwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICBpZiAoT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSAmJiB2YWx1ZS5tX3N0cnVj
dHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3Ao
KSA9PSBQdXRCeUlkRGlyZWN0IHx8IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkOwog
ICAgICAgICAgICAgYXV0byBwcml2YXRlRmllbGRQdXRLaW5kID0gbm9kZS0+b3AoKSA9PSBQdXRQ
cml2YXRlTmFtZUJ5SWQgPyBub2RlLT5wcml2YXRlRmllbGRQdXRLaW5kKCkgOiBQcml2YXRlRmll
bGRQdXRLaW5kOjpub25lKCk7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMg
PSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgIHZhbHVl
Lm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2Fj
aGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAorICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJs
ZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0
S2luZCk7CiAKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CkBAIC00MTUxLDcgKzQx
NTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3Ig
dHJhbnNpdGlvbnM7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFu
dHMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKQEAgLTQxNjIsMTQg
KzQxNjIsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFhbGxHb29kKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFw
cGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQu
b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZh
cmlhbnQub2xkU3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTQ0NzMsNyArNDQ3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBj
YXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJh
bmRTdGF0dXM6CkBAIC00NjUyLDEwICs0NjUyLDEwIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcklDU3RhdHVzKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOiB7
CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1
Y3R1cmUuaXNGaW5pdGUoKSkKLSAgICAgICAgICAgIG5vZGUtPnB1dEJ5SWRTdGF0dXMoKS0+Zmls
dGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgbm9k
ZS0+cHV0QnlTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGMy
MTZhMzk2ZDcxNjA0MjBkZmI0ODE1ZjEyN2U3ODU5ZDVhOTE3M2IuLjZlMjc1MzEwNGJkMzgxNTlj
Y2IxYjFkMzkzNzE1Mzg2YjY0ODZiNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtNDAyLDcg
KzQwMiw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgpAQCAtMTI2NSw3ICsxMjY1LDcgQEAgY2xhc3MgQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgY2FzZSBD
aGVja0FycmF5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKaW5kZXggNjNlNjhkMDM3ZmUxMTEwMWFlNDEyYTI3ODIyNTNmNTk0M2JkNjI3
Yi4uN2Y0MDJlNjk3ZjlkYTA3YTRjNTVhZGE1MTJjNDc5ZGM0ZjIyMzc2YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTMzLDcgKzMz
LDYgQEAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkJvb2xlYW5Db25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgotI2luY2x1ZGUgIkJ5VmFsSW5m
by5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgpAQCAtNzQsNyArNzMsNyBAQAogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5o
IgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxh
Z3MuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJh
bmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtMjM5LDExICsyMzgs
MTEgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIGJvb2wgY2hlY2tQcmVzZW5jZShKU09i
amVjdCoga25vd25CYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25z
dCBTdHJ1Y3R1cmVTZXQmKTsKICAgICB2b2lkIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKE5vZGUq
IGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVy
ZVNldCYpOwogICAgIAotICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRo
ZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFyaWFudC4KKyAgICAvLyBXb3JrcyB3aXRoIGJvdGgg
R2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlWYXJpYW50LgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBlPgogICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5
cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRU
eXBlJik7CiAKLSAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
LCBjb25zdCBQdXRCeUlkVmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBzdG9yZShO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmLCBOb2Rl
KiB2YWx1ZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICB2b2lkIHBhcnNlR2V0
QnlJZChjb25zdCBJbnN0cnVjdGlvbiopOwpAQCAtMjUzLDEzICsyNTIsMTMgQEAgY2xhc3MgQnl0
ZUNvZGVQYXJzZXIgewogICAgIHZvaWQgaGFuZGxlR2V0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIEdldEJ5U3RhdHVzKTsKICAgICB2b2lkIGVtaXRQdXRCeUlkKAotICAgICAgICBOb2RlKiBi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlTdGF0dXMmLCBib29sIGlz
RGlyZWN0LCBFQ01BTW9kZSk7CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAotICAgICAgICBOb2Rl
KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCisgICAgICAgIE5vZGUqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVl
LCBjb25zdCBQdXRCeVN0YXR1cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5k
ZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSk7CiAKICAgICB2b2lkIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBQ
cml2YXRlRmllbGRQdXRLaW5kKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5
U3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICB2b2lkIGhhbmRsZURlbGV0ZUJ5
SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgRGVsZXRlQnlTdGF0
dXMsIEVDTUFNb2RlKTsKQEAgLTQ1MTQsNyArNDUxMyw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKAogICAgICAgICAgICAgICAgIC8vIHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZSBwcm9w
ZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZgog
ICAgICAgICAgICAgICAgIC8vIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZSB2YXJpYW50LnN0cnVjdHVy
ZVNldCgpIGFncmVlIG9uIHRoZSBwcm90b3R5cGUgKGl0IHdvdWxkIGJlCiAgICAgICAgICAgICAg
ICAgLy8gaGlsYXJpb3VzbHkgcmFyZSBpZiB0aGV5IGRpZG4ndCkuIE5vdGUgdGhhdCB3ZSBhcmUg
cmVseWluZyBvbiBzdHJ1Y3R1cmVTZXQoKSBoYXZpbmcKLSAgICAgICAgICAgICAgICAvLyBhdCBs
ZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBv
ZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlJZFN0YXR1cyB3b3JrLgorICAgICAgICAgICAgICAgIC8v
IGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNh
dXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeVN0YXR1cyB3b3JrLgogCiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHJpZ2h0IG5vdywgaWYgd2UgaGF2ZSBhbiBPUENTLCB3ZSBoYXZlIG1vbm8g
cHJvdG8uIEhvd2V2ZXIsIHRoaXMgd2lsbAogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUg
Y2hhbmdlZCBpbiB0aGUgZnV0dXJlIG9uY2Ugd2UgaGF2ZSBhIGh5YnJpZCBkYXRhIHN0cnVjdHVy
ZSBmb3IKQEAgLTQ1OTMsOSArNDU5Miw5IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAog
ICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3Jl
KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIE5v
ZGUqIHZhbHVlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2Uo
YmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgp
LCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKICAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFz
ZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOwpAQCAtNDk5OCwzOSArNDk5
NywzOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbkJ5SWQoVmlydHVhbFJlZ2lzdGVy
IGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjplbWl0UHV0QnlJZCgKLSAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBi
b29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYg
cHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlm
IChpc0RpcmVjdCkKICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRl
bnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKICAgICBlbHNlCi0gICAg
ICAgIGFkZFRvR3JhcGgocHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2gg
OiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZh
bHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRC
eUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSks
IGJhc2UsIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMm
IHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4
LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMs
IGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0g
ICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMu
aXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNl
QWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIGVtaXRQdXRCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1v
ZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlT
dGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYg
KCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisg
ICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9n
cmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAg
ICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAg
ICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3Jw
aGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2Rl
KTsKKyAgICAgICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwg
ZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJ
bmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZh
cmlhbnRJbmRleCA9IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykg
eworICAgICAgICAgICAgICAgIGlmIChwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29u
ZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTUwMzksMjggKzUwMzgsMjggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJ
ZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAg
ICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAKLSAg
ICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRC
eVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRC
eVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAotICAg
ICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52
YXJpYW50cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDog
cHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFu
dHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0g
cHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwg
T3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJU
KHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50
JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50Lmtp
bmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKLSAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJ
ZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogeworICAg
ICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGls
YXRpb24oKSkpCkBAIC01MDY4LDEyICs1MDY3LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwor
ICAgIGNhc2UgUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7CisgICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFz
ZSk7CiAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAg
IGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgIGVtaXRQ
dXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwg
ZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTUxMzUsMTIgKzUxMzQsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAg
Y2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFz
ZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlNldHRlcjogeworICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNl
cygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJh
c2UpOwogCiAgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50KTsKICAgICAgICAgaWYgKCFsb2FkZWRWYWx1
ZSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9k
ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01MTg0LDI2
ICs1MTgzLDI2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQog
ICAgIAogICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3Qs
IGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gfQogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2Rl
KiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCisgICAgY29uc3QgUHV0QnlTdGF0dXMm
IHB1dEJ5U3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCiB7
Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVt
VmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBp
ZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxl
KCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lu
bGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAg
ICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZh
dGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2lu
ZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAo
cHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgu
bV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0
QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxh
bi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9w
dGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkg
ewogICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVu
dGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUyMTEsMjkgKzUyMTAsMjkgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICBpZiAoVU5M
SUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKICAgICAKLSAgICAgICAgYWRkVG9HcmFw
aChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1
cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKLSAgICAgICAgZm9yIChj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkg
eworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVz
LnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJT
dHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5y
ZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVs
dGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJ
ZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVz
LnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVy
TnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRh
KSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VS
VChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1
cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9
IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAg
ICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6
OlJlcGxhY2U6IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7
Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3Jp
Z2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAg
ICAgCiAgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVl
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MjQx
LDkgKzUyNDAsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbjogeworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAg
ICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpOwotICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVz
KGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2
YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewpAQCAtNjQ1NCw0MCArNjQ1MywzMCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBib29sIHRyeUNv
bXBpbGVBc1B1dEJ5T2Zmc2V0ID0gZmFsc2U7CiAKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3Jp
Z2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJ
VCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAgICAgICAvLyBBdCB0aGF0IHRp
bWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLiBGb3IgYHB1dF9wcml2YXRlX25hbWVgLCB3ZSBt
aWdodCBoYXZlIHNvbWUgaW5mbyBmcm9tCi0gICAgICAgICAgICAgICAgLy8gTExJbnQgSUMsIGlu
Y2x1ZGluZyBjYWNoZWQgY2VsbCB0aGF0IHdlIGNvdWxkIHVzZSBpZiBCeVZhbCBpcyBub3QgYXZh
aWxhYmxlLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTY3NzkKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAg
ICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgICAg
ICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aAotICAgICAgICAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJZDsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShpZGVudGlmaWVyLnVp
ZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2Vs
bCgpKTsKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZFR5cGUpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5m
byhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVz
ID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBj
dXJyZW50Q29kZU9yaWdpbigpKTsKKworICAgICAgICAgICAgICAgIGlmIChDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZy
b3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJv
emVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHBy
b3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZv
LT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBzdGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2luZCk7CisgICAgICAgICAgICAg
ICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0cnlDb21waWxlQXNQdXRCeU9mZnNl
dCkKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRp
ZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGJ5dGVjb2RlLm1f
cHV0S2luZCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIXRyeUNvbXBpbGVB
c1B1dEJ5T2Zmc2V0KQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWUs
IE9wSW5mbygpLCBPcEluZm8oYnl0ZWNvZGUubV9wdXRLaW5kKSwgYmFzZSwgcHJvcGVydHksIHZh
bHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3ByaXZhdGVfbmFtZSk7CkBA
IC02NTY3LDEyICs2NTU2LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFw
aC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgYm9vbCBkaXJl
Y3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7CiAKLSAgICAgICAgICAgIFB1dEJ5SWRT
dGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAg
ICAgICBQdXRCeVN0YXR1cyBwdXRCeVN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAog
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAg
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0
YWNrLAotICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CisgICAgICAgICAgICAgICAgY3VycmVudENvZGVP
cmlnaW4oKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJl
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVj
b2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNv
ZGUubV9mbGFncy5lY21hTW9kZSgpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9i
eV9pZCk7CiAgICAgICAgIH0KIApAQCAtNzk3OSwxMyArNzk2OCwxMyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIGlmICgh
bV9ncmFwaC53YXRjaEdsb2JhbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnRpZmllck51bWJl
cikpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAg
ICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzOworICAgICAgICAgICAgICAgIFB1dEJ5
U3RhdHVzIHN0YXR1czsKICAgICAgICAgICAgICAgICBpZiAodWlkKQotICAgICAgICAgICAgICAg
ICAgICBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCB1aWQsIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOworICAgICAg
ICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwg
ZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzKFB1dEJ5SWRTdGF0
dXM6OlRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeVN0
YXR1cyhQdXRCeVN0YXR1czo6VGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0
YXR1cy5udW1WYXJpYW50cygpICE9IDEKLSAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBd
LmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQorICAgICAgICAgICAgICAgICAgICB8
fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6UmVwbGFjZQogICAgICAgICAgICAg
ICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0dXJlKCkuc2l6ZSgpICE9IDEpIHsKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywgdWlkKSksIE9wSW5mbyhieXRlY29kZS5tX2dldFB1dEluZm8uZWNt
YU1vZGUoKSksIGdldChieXRlY29kZS5tX3Njb3BlKSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04ODE5LDQ1ICs4ODA4LDI3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlIGJ5dGVjb2RlLCBCeXRlY29k
ZUluZGV4IG9zckV4aXRJbmRlCiAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1
ZSk7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDsKICAgICBib29sIGNvbXBpbGVkQXNQdXRCeUlkID0gZmFsc2U7Ci0gICAgewot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
Ci0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgewotICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVP
cmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAvLyBGSVhN
RTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQs
IGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRo
ZXJlIGlzIG5vIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAg
ICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgJiYgIWJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQot
ICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJZDsK
LSAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygp
LmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAg
ICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBmcm96ZW4g
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgaWYgKCFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRJZGVudCkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25z
dGFudFZhbHVlKSkgeworCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVT
dGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmln
aW4oKSk7CiAKKyAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0
YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAg
IGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUq
IGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAg
ICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0
eSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
dWlkLT5pc1N5bWJvbCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVp
ZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0Rp
cmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNv
bXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxl
ZEFzUHV0QnlJZCkKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
aWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0
SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRB
c1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5k
ZXggOTE2NDcwZDE3ZDUzYWYzNTZiZDUxNDRjOTRlNjA3ZGEwNzk1OGI0YS4uNmYyMDRkMmM1ZGUw
YTYxMmY3MzFjOTU3YjQ2MWRjZjMwYzRhMTFhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKQEAgLTU2OSw3ICs1NjksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3Jp
dGVGdQogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBG
aWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNh
c2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCmluZGV4IDg2YTNkMDc2
NjRkN2ZhOTI3NTEyOTk3NzlmNDZmMTk3MmIwYWQwZjMuLjRjZTlmZjBlYjVkYTUxMGVjMjM0MDY0
NjJhNzFlODgwOTUwOTYyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgY2xvYmJlcnNF
eGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggZWFlYWY4NWVhMjU0MTcyNTc1NWY0OGNlZmRlZGUwM2I4
MWM5ZmEyYS4uYjg4MjVhY2FlMzRlNTVmODkyNjU5MTI5ODQxZDkzMjRhNDBjMTYxNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUg
IkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUNhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUwMSw3ICs1
MDEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgICAgICAgICAgCiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAg
IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCkuZ2VuZXJpY0ZpbHRlcihbJl0gKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBi
YXNlVmFsdWUuY29udGFpbnMobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC01MTMsMTEgKzUxMyw5IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojpy
ZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKHZhcmlh
bnQuaWRlbnRpZmllcigpLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw3ICsxMjExLDcgQEAgY2xhc3Mg
Q29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAg
fQogCi0gICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2Rl
KiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHZvaWQgZW1pdFB1
dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5v
ZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKQEAg
LTEyMjQsNyArMTIyMiw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAg
ICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAg
IHRyYW5zaXRpb24gPSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKAogICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkp
KTsKICAgICAgICAgfQpAQCAtMTI2OSw3ICsxMjY3LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNl
dChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgICAgIG5vZGUtPm9yaWdp
bi5leGl0T0sgPSBjYW5FeGl0OwogCi0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoZGlkQWxsb2NhdGVT
dG9yYWdlKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIE51a2VTdHJ1Y3R1
cmVBbmRTZXRCdXR0ZXJmbHksCkBAIC0xNDA2LDEwICsxNDA0LDEwIEBAIGNsYXNzIENvbnN0YW50
Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgaWYgKCFiYXNlVmFsdWUubV9z
dHJ1Y3R1cmUuaXNGaW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBQdXRC
eUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIFB1
dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgIGJh
c2VWYWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgbm9kZS0+
Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAorICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxl
SWRlbnRpZmllcigpLAogICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQp
OwogCiAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCkBAIC0xNDI0LDggKzE0MjIsOCBA
QCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAKICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgIFRyYW5zaXRpb25WZWN0b3Ig
dHJhbnNpdGlvbnM7Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
OiBzdGF0dXMudmFyaWFudHMoKSkgewotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlW
YXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJp
YW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndh
dGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTE0NDgsNyArMTQ0Niw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUp
KTsKICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHBy
aXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkgfHwgcHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgp
KTsKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKQEAgLTE0NjQs
OCArMTQ2Miw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
ICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVs
dCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAKICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IEZpbHRlclB1dEJ5SWRTdGF0dXMsIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhub2RlLT5v
cmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgRmlsdGVyUHV0QnlTdGF0dXMsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKICAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUpKTsK
IAogICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpLmVuc3VyZSh1aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmlu
ZGV4IDYwZmJiMTVjNTkxNmI4OWRiNGM2ZDU1MTUwYzY2NTNjMzdlMThmMWUuLmU2NDgxNjdjMTE4
NmJjOGM5M2YzMmU4YzU0YmU3NTE4MzBlZjExMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFhNDk2NGU5YTVjZjJkNTZjNjQ4M2QyMmFi
YmE2NjcyYWM3Mzg1MDkuLmRlNGYyM2ZiYWEwYzk2ZGJjOGFhYzUyNDkxNTNmOTg2ZTM5OGEyNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjg2
NSw3ICsyODY1LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
IGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZjOWRjNDM5NDFlNTFjOGUzMTVk
YTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5NTA4NzYzOGY4NmRkNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTM4NSw4ICszODUsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwg
Tm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5n
ZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0YXR1cygpKQogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwotICAgIGlmIChub2RlLT5oYXNQ
dXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5SWRT
dGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVzKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNFbnVt
ZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZW51bWVyYXRvck1v
ZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSk7CiAgICAgaWYgKG5v
ZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAppbmRleCA5MTBjZjEzOTlmYzZjOWRiMWE3YzU0NGZhMWNhOThiZDIzY2IzYzY5Li4xMmYy
OWYxMDcxNThhZmIwMGM2NThhNmRmNDM5YTc5MTg0MmU4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5rQnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3B1dEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeUlkcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZh
bHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgbGlu
a0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5k
ZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFhNDA5NGY1NzA2MGE3Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNk
NmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkxYjI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTk5LDYgKzE5OSwxMSBAQCBjbGFzcyBKSVRDb21waWxl
ciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJbmxp
bmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAg
IH0KIAorICAgIHZvaWQgYWRkUHV0QnlWYWwoY29uc3QgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdl
biwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeVZh
bHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4oZ2VuLCBz
bG93UGF0aCkpOworICAgIH0KKwogICAgIHZvaWQgYWRkRGVsQnlJZChjb25zdCBKSVREZWxCeUlk
R2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKICAgICB7CiAgICAg
ICAgIG1fZGVsQnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJh
dG9yPihnZW4sIHNsb3dQYXRoKSk7CkBAIC0zNjAsNiArMzY1LDcgQEAgY2xhc3MgSklUQ29tcGls
ZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVy
PEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9n
ZXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJh
dG9yPiwgND4gbV9wdXRCeUlkczsKKyAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1
dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9wdXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPiwgND4gbV9kZWxCeUlkczsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9kZWxCeVZhbHM7
CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRJbkJ5SWRHZW5lcmF0b3I+LCA0PiBt
X2luQnlJZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCBl
YzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2NGYwZDZmNDY0NjY0ZDBmLi4yYmQ0YWU0NTM1MDRjZDZi
NzhkOGQ5MWUyNDliMjBmYTczMGMzYzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBOdWtlU3Ry
dWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBhYzJi
NGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFkMjc3YTE5YmQxYzlhLi43Y2FhMjAyMDEyZGNhNThiZGI5
ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApA
QCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgog
I2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgot
I2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCiAj
aW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRU
eXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0cnVj
dCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQs
IDI+IHZhcmlhbnRzOworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQsIDI+IHZhcmlhbnRzOwogICAg
IAogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0
ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0zMjEwLDE1ICszMjEwLDE1IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEluQnlTdGF0dXMqPigpOwogICAgIH0KICAgICAK
LSAgICBib29sIGhhc1B1dEJ5SWRTdGF0dXMoKQorICAgIGJvb2wgaGFzUHV0QnlTdGF0dXMoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlJZFN0YXR1czsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlTdGF0dXM7CiAgICAgfQogICAgIAotICAgIFB1
dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0dXMoKQorICAgIFB1dEJ5U3RhdHVzKiBwdXRCeVN0YXR1
cygpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzUHV0QnlJZFN0YXR1cygpKTsKLSAgICAgICAg
cmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5SWRTdGF0dXMqPigpOworICAgICAgICBBU1NFUlQoaGFz
UHV0QnlTdGF0dXMoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mby5hczxQdXRCeVN0YXR1cyo+
KCk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNEZWxldGVCeVN0YXR1cygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggZTc1YmNmZThhMWFjMzcxYTAyZTU2NTQ5NmI5
ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2ZkYWM4ZjIzNTE4Mjg3MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtNTQ2LDcgKzU0Niw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGaWx0ZXJDYWxs
TGlua1N0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckdldEJ5U3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVySW5CeVN0YXR1cywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGaWx0ZXJQdXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZpbHRlckRlbGV0ZUJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhGaWx0ZXJTZXRQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCBiMWNmZWU4YWNlYzM4Y2MwNWE0MTZlYWJlYmI5ZTIy
MjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4YjFjNGNmYTZhMzExMDI4Y2JhMGNiZWRkZjY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCkBAIC0yMTUsMjEgKzIxNSw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIGNhc2Ug
SW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAgICAgICBpZiAoY2FsbEluc3Ry
dWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbCkgewotICAgICAgICAgICAgICAgIC8v
IFdlIGNvbXBpbGUgb3BfcHV0X2J5X3ZhbCBhcyBQdXRCeUlkIGFuZCBpbmxpbmVzIFNldHRlckNh
bGwgb25seSB3aGVuIHdlIGZvdW5kIFN0cnVjdHVyZVN0dWJJbmZvIGZvciB0aGlzIG9wX3B1dF9i
eV92YWwuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlIHRoYXQg
d2UgY2Fubm90IGZpbmQgU3RydWN0dXJlU3R1YkluZm8gaGVyZS4gTGV0J3MgY29uc2lkZXIgdGhl
IGZvbGxvd2luZyBzY2VuYXJpby4KLSAgICAgICAgICAgICAgICAvLyAxLiBCYXNlbGluZSBDb2Rl
QmxvY2sgKEEpIGlzIGNvbXBpbGVkLgotICAgICAgICAgICAgICAgIC8vIDIuIChBKSBnZXRzIERG
RyAoQikuCi0gICAgICAgICAgICAgICAgLy8gMy4gU2luY2UgKEEpIGNvbGxlY3RzIGVub3VnaCBp
bmZvcm1hdGlvbiBmb3IgcHV0X2J5X3ZhbCwgKEIpIGNhbiBnZXQgU3RydWN0dXJlU3R1YkluZm8g
ZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQgYXMgaW5saW5lZCBTZXR0ZXIgY2FsbC4KLSAgICAgICAg
ICAgICAgICAvLyA0LiAoQSkncyBKSVREYXRhIGlzIGRlc3Ryb3llZCBzaW5jZSBpdCBpcyBub3Qg
ZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNvbWVzIExMSW50LgotICAgICAgICAgICAgICAgIC8vIDUu
IFRoZSBDb2RlQmxvY2sgaW5saW5pbmcgKEEpIGdldHMgT1NSIGV4aXQuIFNvIChBKSBpcyBleGVj
dXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkgZ2V0cyBCYXNlbGluZSBDb2RlQmxvY2sgYWdhaW4uCi0g
ICAgICAgICAgICAgICAgLy8gNi4gKEIpIGdldHMgT1NSIGV4aXQuIChCKSBhdHRlbXB0cyB0byBz
ZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJbmZvIGluIChBKSBmb3IgUHV0QnlJZCAob3JpZ2luYWxs
eSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBkb2VzIG5vdCBleGlzdCBzaW5jZSAoQSkncyBKSVREYXRh
IGlzIGNsZWFyZWQgb25jZS4KLSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kQnlWYWxJbmZvKENvZGVPcmlnaW4oY2Fs
bEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChieVZhbElu
Zm8pOwotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBieVZhbEluZm8tPmRvbmVUYXJnZXQu
cmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRl
Y29kZUluZGV4KSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CiAgICAg
ICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1YkluZm8tPmRvbmVMb2NhdGlvbi5yZXRhZ2dlZDxKU0Vu
dHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggNjY3ODM1NTVkZjIx
NmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhmZDU4YS4uMWY0MTgzMThhNGMwZGVjNmQyZTk5ZDQwOWY3
MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0xMjU4LDcgKzEy
NTgsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTI1NTQsMTUgKzI1NTQs
MTMgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFy
ZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0
IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVu
dE9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5k
KFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQo
KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFw
cGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9m
ZnNldCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGRO
b2RlKApAQCAtMjYxNSw3ICsyNjEzLDcgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDE2MjJk
ZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYyZWNlODBmZTc0ZjIuLjg5ZTVlZjRkODUxZWM5MGQ2ZDk4
NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDQ5LDcg
KzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CiAgICAgICAgIGNhc2UgV2Vha01hcFNldDoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDFlMDQ0Y2Y5
ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRiOWM5YTVhMjAuLmQ1NDk2NDQ1MGI2MzIyNzQ4OThkNjhj
OGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8K
ICAgICAgICAgCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAppbmRleCAzZTMyNDdmOGM2OTI2ZDI5N2I2Y2EyY2YxNGUyZDZiNWQ5OTNlYjZi
Li42MDNmZjdiMmU1MmRjZWVlM2JjMzY1ZGJjNGVlMzNiM2MzN2UxZDI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAg
LTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
aW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uYzhmYzE1NzQx
NTlkNDQ2Y2RlYzg5ZTg3Y2Q3MThkMzBhNTIwMTY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC01ODcxLDcgKzU4NzEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggNTQxMGQ5MDg5NmRjNGYwMTA1NzkzMGRmODJm
NjYxOTJiODFmNmMwZi4uYzVlNWNmMzZhNzcwZDE1ODNiNjkzZGZkODgxZDY0MjRhYjE3YmM4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTMxMiw4ICsz
MTIsOCBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFy
aWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgIT0gUHV0QnlWYXJp
YW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhdmFyaWFudC5vbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgICAgICAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCBmZGE2NGQzNWRhMzQyODg5Yzc5OGMwNTFlOTU3NmU4
YTFlMzNhMzliLi5mMWEzODA5ZDdlZmUzMGY4ZDU5YmEyMWZhY2QwNzA5ZTQzOGI5MDNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CkBA
IC00MjEsNyArNDIxLDcgQEAgY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKaW5kZXggMDNmODY1MmM2Y2I4MmM2MjAyMGQxZTY2YmI1OWY0NjU5
MWQ4M2U0Yy4uODNiNTFiYTljZjc2NWRhMDQ2MzczYTc5YjFjYTAzMzBjNDNjN2E3OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtNDA3LDcg
KzQwNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQog
ICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggNWEzZTk4Zjc1MzcwMWQzYjM0Zjg0Yjk4MDgzZDI0ZGFlOGVmNzEw
MC4uYzM5ZjJkZGYzNzUzNjMxYjE1Mjg1MTFhYmM5MGU3MWE1MGEzMDdjNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTY0OSw3ICsxNjQ5
LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKQEAgLTg5NTEsNyArODk1MSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAg
ICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9
IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpW2pdKTsKICAgICAgICAgICAgICAgICBiYXNlU2V0LmFkZChzdHJ1Y3R1cmUp
OwpAQCAtODk2NiwxNiArODk2NiwxNiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgp
ID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5
VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKIAogICAgICAgICAgICAgTFZhbHVl
IHN0b3JhZ2U7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFy
aWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNlOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0Lmxv
YWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsK
KyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7CiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIG1fb3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC04OTg3LDcgKzg5ODcsNyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9y
YWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5m
bygpLnR5cGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmluZGV4IDY5
N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQwOWY0ZjUxOWIwNjguLjc4ZmQ0OTQzZjllY2JjNGMz
NWM3Y2RjYjMyYjczNzdjYWI5ZjFlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiCkBAIC0xNDEsNyArMTQxLDcgQEAgZGVmIHNlbGYud3JpdGVfYnl0ZWNvZGVfc3RydWN0
cyhieXRlY29kZV9saXN0LCBieXRlY29kZV9zdHJ1Y3RzX2ZpbGVuYW1lKQogI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUg
IlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRl
ICJUb1RoaXNTdGF0dXMuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBm
MDRjMWY0MjhlMTBiZmM3MWZhNWNlMzVlMDAyODY4YmI3OGFkZWY2Li45MWIzYjMxNTUxMGRhNjgy
NGIzYzk2MzQxMGUzMzZkOTU4OWFiYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMu
aApAQCAtNjcsMTAgKzY3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKE9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpIFwKICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlk
RGVmaW5lUHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6ZSkgXAogICAgIG1hY3JvKE9wZXJh
dGlvblB1dEJ5SWRQdXRQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCi0gICAgbWFj
cm8oUHV0QnlJZEFkZEFjY2Vzc0Nhc2UpIFwKLSAgICBtYWNybyhQdXRCeUlkUmVwbGFjZVdpdGhK
dW1wKSBcCi0gICAgbWFjcm8oUHV0QnlJZFNlbGZQYXRjaCkgXAotICAgIG1hY3JvKEluQnlJZFNl
bGZQYXRjaCkgXAorICAgIG1hY3JvKFB1dEJ5QWRkQWNjZXNzQ2FzZSkgXAorICAgIG1hY3JvKFB1
dEJ5UmVwbGFjZVdpdGhKdW1wKSBcCisgICAgbWFjcm8oUHV0QnlTZWxmUGF0Y2gpIFwKKyAgICBt
YWNybyhJbkJ5U2VsZlBhdGNoKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEp1bXApIFwK
ICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYykgXAogICAgIG1hY3JvKE9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRl
eCBjOWIwMWMwZDA1YTVkNmYwYzExZDBhMzczODFjMmQ5OGVmYTQ3MTMyLi41MGRlODU1YjZhYzkw
ZWU2ZDNkMWM5NjFlNDQ4NDgyMzk1YTQ2MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CkBAIC01MTAsNiArNTEwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICBtX2dldEJ5VmFsSW5kZXggPSAwOwogICAgIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggPSAw
OwogICAgIG1fcHV0QnlJZEluZGV4ID0gMDsKKyAgICBtX3B1dEJ5VmFsSW5kZXggPSAwOwogICAg
IG1faW5CeUlkSW5kZXggPSAwOwogICAgIG1faW5CeVZhbEluZGV4ID0gMDsKICAgICBtX2RlbEJ5
SWRJbmRleCA9IDA7CkBAIC02NjIsNiArNjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRJbmRleCA9PSBtX2dldEJ5
SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9
PSBtX2dldEJ5SWRzV2l0aFRoaXMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9wdXRC
eVZhbEluZGV4ID09IG1fcHV0QnlWYWxzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9p
bkJ5SWRJbmRleCA9PSBtX2luQnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2lu
c3RhbmNlT2ZJbmRleCA9PSBtX2luc3RhbmNlT2ZzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCA9PSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLnNp
emUoKSk7CkBAIC05MDksNiArOTExLDcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
ZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5
SWRzLCBwYXRjaEJ1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA2NDQwZmYyNDEw
ZjAzNzJkMWI1ZmI3ZjA1NzdmZDcwZjQ5ZTIwNTU4Li4yNmFmZmRhNTdjNDA5NWI0OTFhYmI1NDFm
MjYyN2IxYmYwYTYxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTIyNSwyOCArMjI1
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRC
eVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZh
bChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklU
IGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICB9Ci0KICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dFByaXZhdGVOYW1l
V2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZp
ZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2spOwpAQCAtMjY4LDEwICsyNDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29t
cGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAg
ICAgICAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIAog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxlSWRlbnRpZmllcik7CiAKQEAgLTM4
NCwzNiArMzU4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5
cGUsIEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRv
SG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAg
ICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiBy
ZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgotICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3Rv
cmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAotICAgICAg
ICAvLyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFs
cmVhZHkgcHJvZmlsZWQuCi0gICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCi0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBJbnQzMlNoYXBlKTsKLSAg
ICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3Qg
ZW1pdERvdWJsZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRH
ZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIERv
dWJsZVNoYXBlKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAg
ICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIEluZGV4aW5nVHlwZSBpbmRleGluZ1No
YXBlID0gQ29udGlndW91c1NoYXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgQnlWYWxJbmZvKik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlU
eXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUoT3ApOwpAQCAtMTA2NCw2ICsxMDA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAgICAgIFZl
Y3RvcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAg
ICAgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAgICAgIFZl
Y3RvcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxK
SVRJbkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlWYWxH
ZW5lcmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2VuZXJhdG9y
PiBtX2RlbEJ5SWRzOwpAQCAtMTA5MSw2ICsxMDM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2ln
bmVkIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25l
ZCBtX3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlW
YWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5kZXggeyBV
SU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CmluZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLmE5MGM4Njlk
Mzk3OTk3NmM2ZmZhNmVkZDIzZmMzMjYzNDQyZjU5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsNyAr
MTQyLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAgICBFQ01B
TW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0
b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgICAgIDog
SklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRl
LCBBY2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1Yklu
Zm9HUFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtp
bmQocHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjcgQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVy
YXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRo
KQogICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0
YXJ0TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVy
YXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9H
UFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCisgICAgOiBCYXNlKGNvZGVC
bG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlwZSwgdXNl
ZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCisgICAgLCBtX3B1dEtpbmQo
cHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAg
ICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKworICAgIG1fc3R1
YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5yZWdz
LnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnZh
bHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIgPSBzdHViSW5mb0dQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIG1fc3R1YkluZm8t
PmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8tPnZhbHVlVGFnR1BS
ID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5wcm9wZXJ0eVRhZ0dQUiA9IHBy
b3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKK3sKKyAgICBtX3N0YXJ0ID0g
aml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwg
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUo
TGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQoreworICAgIEJhc2U6
OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xv
d1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAgICBzd2l0Y2ggKG1fcHV0S2lu
ZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgaWYgKG1fZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICBBU1NFUlQobV9lY21hTW9k
ZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxl
ciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6SklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJbmZvR1BSKQogICAg
IDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFj
Y2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0MTAxYTgxZWJkMTU1
YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uMzA1YjcwZDNmOTJiMWZlM2I1YTY2N2RiMzM0NGJiNjY3
ZDZmYjQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIAogY2xhc3Mg
SklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIHB1
YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBtX2VjbWFNb2RlKEVD
TUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBk
ZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAgQ29kZUJsb2NrKiwg
SklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCkBAIC0x
NDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhG
dW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1vZGU7CisgICAgRUNN
QU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAgIFB1dEtpbmQgbV9w
dXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigpID0gZGVmYXVs
dDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqLCBKSVRU
eXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01B
TW9kZSwgUHV0S2luZCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1Nl
dCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAg
ICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZl
ciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOworCisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0
aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpz
dHJpY3QoKSB9OworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKK307CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmlu
ZGV4IDc3NDRiNTA4MzdhZWE3YmEwODVhMDEzNDVmYmJmMmI2OGJmMGQ0MjUuLjc3YWY1YjEzM2Y0
NWZiMTFkNDA1YjM2OTkyYmUwYzcyODA2NGEwMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCkBAIC0zNjQsMjQgKzM2NCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
CiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZPdXRP
ZkJvdW5kcygpKTsKIH0KIAotaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCi17Ci0gICAgYXV0byBhcnJheVByb2ZpbGVTYXcgPSBb
XSAoQXJyYXlNb2RlcyBhcnJheU1vZGVzLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkgewotICAg
ICAgICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25vcmluZ1R5cGVkQXJyYXlzKGFycmF5TW9k
ZXMsIGNhcGFiaWxpdHkpOwotICAgIH07Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKLSAgICBBcnJheU1vZGVzIGFycmF5TW9kZXMgPSBw
cm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMobG9ja2VyKTsKLSAgICBpZiAoYXJyYXlQcm9maWxl
U2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVERvdWJsZTsK
LSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEludDMyU2hhcGUpKQotICAgICAg
ICByZXR1cm4gSklUSW50MzI7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBB
cnJheVN0b3JhZ2VTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7Ci0gICAg
cmV0dXJuIEpJVENvbnRpZ3VvdXM7Ci19Ci0KIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBkMjRkOWY1ZWRmODcxNTgzOGQ3NzViZWNjNzFm
ODE5MjRjYjkzYzk3Li43ZmQwNDYzMjgxZTM1ZGZlNTVmYWUyMDYxMDBhMTVkYTk3MTlhMjk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTcxOSw3
ICs3MTksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVj
dHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzUxLDcgKzc1
MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzgyLDcgKzc4
Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5m
bywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHVi
SW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC04MTMsNyArODEz
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
LCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJ
bmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFB1dFByaXZhdGVGaWVsZENhbGxiYWNrPgpAQCAtODg4LDcgKzg4OCw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemUsIHZvaWQsCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNj
ZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkp
OwogCiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9j
aywgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlE
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lKTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8s
IFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKICAg
ICB9KTsKIH0KIApAQCAtOTI0LDE2ICs5MjQsMTUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEoK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0
dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOworICAgICAgICAgICAgcmVw
YXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1
cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOwogICAgIH0pOwogfQogCi1zdGF0aWMgdm9pZCBw
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBF
Q01BTW9kZSBlY21hTW9kZSkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1
ZSB2YWx1ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGlu
ZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbElu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7CiAg
ICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CkBAIC05NDIsNyArOTQxLDggQEAgc3RhdGlj
IHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3UKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygp
OworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVBy
b2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAg
ICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGds
b2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtOTUxLDMyICs5NTEsMzAgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChnbG9i
YWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgcmV0dXJu
OwotICAgIH0gCisgICAgfQorCiAgICAgaWYgKHN1YnNjcmlwdC5pc051bWJlcigpKSB7Ci0gICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91
dE9mQm91bmRzKCk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNl
dE91dE9mQm91bmRzKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5ID0g
c3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAvLyBEb24ndCBwdXQg
dG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1Yklu
Zm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1
YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0
KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSwgdmFs
dWUsIHNsb3QpOwogfQogCi1zdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkK
K3N0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF5YmVJbmRl
eCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZv
LT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpbmRleCA9ICptYXliZUlu
ZGV4OwogCiAgICAgICAgIHN3aXRjaCAoYmFzZU9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAg
LTk4OCw3ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAg
ICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5z
ZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTAw
MiwxNSArMTAwMSwxMSBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkgewotICAgICAgICBieVZhbEluZm8tPnRv
b2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFz
ZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1
ZSwgMCwgZWNtYU1vZGUuaXNTdHJpY3QoKSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQ
dXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXND
YWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQu
dWlkKCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFz
ZU9iamVjdCwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXRE
aXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHksIHZh
bHVlLCBzbG90KTsKQEAgLTEwMjMsMjI2ICsxMDE4LDIwNiBAQCBlbnVtIGNsYXNzIE9wdGltaXph
dGlvblJlc3VsdCB7CiAgICAgR2l2ZVVwLAogfTsKIAotc3RhdGljIE9wdGltaXphdGlvblJlc3Vs
dCB0cnlQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUs
IEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRCeVZhbE9wdGlt
aXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBl
Y21hTW9kZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLQotICAgIC8vIFNlZSBp
ZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKLQog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXND
b3B5T25Xcml0ZShiYXNlVmFsdWUuZ2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSkKLSAgICAg
ICAgcmV0dXJuIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotCi0gICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0KLSAgICAgICAgQVNTRVJUKGNhbGxGcmFt
ZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQo
IWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRl
eGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgot
ICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVj
dHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQo
YXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAg
IEpJVDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgIGlmIChiYXNlVmFsdWUu
aXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGlu
Z01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZSkgeworICAgICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXBhdGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBz
dWJzY3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2gg
YW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVu
IGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlv
blJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVj
dHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgICAgICBpZiAoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Cisg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1By
b3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8
ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSk7CisgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21h
TW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgaWYg
KGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxl
SWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVw
KTsKLSAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3Bl
cnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgo
KSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5z
dHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9w
UHV0QnlWYWw+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2lu
ZDo6Tm90RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEg
Z2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBz
dWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZh
bHVlKTsKKyAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChz
dWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lk
ZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6
OkJ5VmFsLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1
bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFr
ZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtl
IHN1cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBj
YXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmpl
Y3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVz
IHRvIG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgcHV0X2J5X3ZhbCBtYXkgYmUgcG9seW1v
cnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUg
cmVzdWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50
ID49IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZh
bHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogfQogCi1KU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVz
dWx0ID0gdHJ5UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9V
Ul9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAg
ICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkK
LSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMpOwotICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbElu
Zm8sIGVjbWFNb2RlKSk7CisKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5m
bywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotc3RhdGljIE9wdGltaXphdGlv
blJlc3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmpl
Y3QqIG9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewotICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwogCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0
aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6
Tm90T3B0aW1pemVkOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKIAorICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZv
LCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNj
cmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQorewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VS
VCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZh
bHVlKTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewot
ICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0RGlyZWN0KGFycmF5TW9kZSkgJiYg
YXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7CisgICAgaWYgKCFpc0NvcHlPbldy
aXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7
CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZt
KTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLQotICAgICAgICAgICAgICAg
IEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgICAgICAgICAg
ICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywg
c3RydWN0dXJlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgfQorICAgIH0KIAotICAg
ICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhh
dCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0
aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQot
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZl
VXA7Ci0gICAgfSBlbHNlIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50
aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXND
YWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXApOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9
IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJS
b3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRC
eVZhbERpcmVjdD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRL
aW5kOjpEaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBn
ZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1
YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSk7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2Rl
LmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CisKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVy
ZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIENvbW1vblNsb3dQYXRoczo6
cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOworCisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNs
b3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25S
ZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVz
dWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2Ug
dGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBt
YWtlIHN1cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZv
ciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBv
YmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9y
IHVzIHRvIG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9s
eW1vcnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0
aGUgcmVzdWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENv
dW50ID49IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9u
UmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGly
ZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBw
cm9maWxlLCBlY21hTW9kZSkpOwogCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0K
IAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21h
TW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUp
OwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3Jp
cHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQg
PSB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2Rl
QmxvY2ssIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAg
ICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRv
b2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQot
ICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIG9iamVjdCwgc3Vic2NyaXB0
LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1p
emUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQog
Ci1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKLSAgICAKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKIAotICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBz
dWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKyAgICBkaXJlY3RQdXRCeVZh
bE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgp
KTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBB
cnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7Cisg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUg
ZWNtYU1vZGUpKQorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAg
cHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2Zp
bGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKKworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKworICAgIHN0dWJJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdl
bmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJy
YXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
VmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRT
dWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgZGly
ZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQs
IHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChi
YXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkp
OworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkp
OworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRC
eVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUs
IHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5kKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggMjU4NGU5OTVlNDY2
ZGU5NGE5YjIwMzI3YjBlYzQ4ODFkNWYxOTk5OC4uZWZiZDg4NzM1NDJmYzNmNGJlODNlMDZiZTA2
MjU3YmZjMjljYzQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKQEAgLTIwMywxMCArMjAzLDE1IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAKIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlW
YWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1v
ZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CiAKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBFQ01BTW9kZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiwg
SlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDU2NjhkZmJlNDFkMTJhOTIyNGE0
M2MwODgxMzRlM2NjNWM4NGNjN2UuLjAwZTc2ODQ3OWQ3MDUyMWUzZWUyM2VjNGY1OGE2MmQwNDQ0
ZDRlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCkBAIC00MzgsMTc3ICs0MzgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7
CisgICAgUHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWw+ID8g
UHV0S2luZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGlyZWN0OwogICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGJvb2wgcHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7Ci0g
ICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQotICAgICAgICBtb3ZlKEltbTMy
KGdldE9wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7Ci0gICAgZWxzZQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0KKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleDsKLSAgICBpZiAoIXByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNz
KCZieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1QxKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBT
ZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgotICAgICAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQo
cmVnVDEsIHJlZ1QxKTsKLSAgICB9CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CiAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBk
byB0aGlzIGlubGluZT8KLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIo
SW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7Ci0KLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNo
b29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEpJ
VEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRU
eXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFn
ZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCisgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMpLCByZWdUMiwgZWNtYU1vZGUsIHB1dEtpbmQpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwot
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFs
SW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVt
cChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotCi0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBv
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVS
ZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0g
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QzKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAg
ICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QzKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGlu
ayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7Ci0gICAgc3RvcmUzMihyZWdU
MywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0g
ICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVz
cygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIH0gZWxzZQotICAgICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQo
WmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlNjQocmVnVDMsIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0
eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgYnJhbmNoMzIoQmVs
b3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLQotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTog
VXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8g
cmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02NjEsMTIgKzUxNSwxNSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02NzQsMTYgKzUzMSwxNCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDMsIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTY5NCwyOCArNTQ5LDI2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIg
PSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1
bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BS
NTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVy
YXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFs
SW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJl
c3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtNzM2LDE4ICs1ODksMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXQKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbElu
Zm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9
IGFyZ3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRH
UFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmpl
Y3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9i
YWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIs
IGVjbWFNb2RlR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BS
NCwgQnlWYWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVs
c2UKICAgICAgICAgaml0LnJldCgpOwogCkBAIC04MDksMTMgKzY2MiwxMyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZQogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRH
UFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5k
R1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgdmFsdWVQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5m
byksIGJ5VmFsSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgp
KSwgcHV0S2luZEdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CkBAIC04NTEsMTQgKzcwNCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxs
RwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJn
dW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BS
NTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRl
TmFtZU9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFs
dWVQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQ
UiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRH
UFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKQEAgLTMyOTAsODIgKzMxNDMsNiBA
QCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBDYWNoZWFibAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJp
ZXIgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQz
MjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxs
cHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxs
cHRyKTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAg
ICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZv
ckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAg
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAg
ICAgICAgICAvLyBDdXJyZW50bHksIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZl
ciBjb21lcyBoZXJlLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGlu
ZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1Bh
dGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNs
b3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9u
ZVRhcmdldCk7Ci0gICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBB
U1NFUlQocmVtb3ZlQ29kZVB0clRhZyhtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkgPT0gcmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20s
IG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxlZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJl
Y3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q7Ci0gICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0
X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRT
dHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVj
dCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jayku
ZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAg
ICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFk
VHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBU
aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVu
aXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0
ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBC
eVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlN
b2RlKTsKLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwpAQCAtMzQwNywyMjMgKzMxODQsNiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtp
bmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlE
ID09IG9wX3B1dF9ieV92YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0KLSAgICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoYnl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2Fz
ZXMpOwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmVDYXNlcywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hl
Y2tzLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3Ms
IGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNh
bGxTaXRlIDogbV9uZWFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVl
KTsKLSAgICB9Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsK
LSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFs
aXplKHBhdGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92
YWwlcyB3aXRoIGNhY2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwg
cHJvcGVydHlOYW1lLnVpZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2Nr
KS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8t
PnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhK
dW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1f
c2xvd09wZXJhdGlvbiA9IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90
SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
KSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5v
dGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0
IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxh
dGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcik7Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsRGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwotICAgIEFTU0VSVChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwot
ICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0j
ZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVy
dHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJl
Z2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
MiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAot
ICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVh
cmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlz
Q29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIo
dHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29s
dXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVh
bCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5
cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxl
T3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCkpOwotI2Vsc2UK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKSk7Ci0jZW5kaWYKLSAg
ICAKLSAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9i
eV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNl
IHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0
aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2Ny
YXRjaDIsIGxhdGVTY3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIGlmIChpc0NsYW1wZWQodHlw
ZSkpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICBB
U1NFUlQoIUpTQzo6aXNTaWduZWQodHlwZSkpOwotICAgICAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0g
ICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNj
cmF0Y2gpOwotICAgICAgICBKdW1wIGNsYW1wZWQgPSBqdW1wKCk7Ci0gICAgICAgIHRvb0JpZy5s
aW5rKHRoaXMpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNo
KTsKLSAgICAgICAgY2xhbXBlZC5saW5rKHRoaXMpOwotICAgICAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAg
Y2FzZSAxOgotICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0g
ICAgICAgIHN0b3JlMTYoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3Bl
cnR5LCBUaW1lc1R3bykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHN0
b3JlMzIoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1l
c0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9w
IGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
VHlwZWRBcnJheVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgIAotICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJv
cGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAg
IFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3Jh
dGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2gg
PSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAg
ICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAg
ICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdl
dCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGlu
ayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JU
eXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJs
eVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIoZWFybHlT
Y3JhdGNoKTsKLSAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDAp
OwotICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIoZWFybHlTY3JhdGNoKSk7Ci0g
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9E
b3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vs
c2UKLSAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAg
SnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29u
dmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5
ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKLSAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0
Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICAv
LyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4
Y2VwdCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVu
Y2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFu
ZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxh
dGVTY3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkp
IHsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZw
UmVnVDApOwotICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRj
aCwgcHJvcGVydHksIFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0g
ICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggYjk4YmZl
Y2VkYWE1NTYwMWY5NWE4OGJlZGE2MWIwOWYxYTM0MzQ3MS4uZmJlMWEwMzdmMjlkMmMzZjhkYjNh
ZGE5MjE5Y2FhNWY4NzFiNjNlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC00NjYsMTUwICs0NjYsMjcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9k
ZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CisgICAgUHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19z
YW1lX3Y8T3AsIE9wUHV0QnlWYWw+ID8gUHV0S2luZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGly
ZWN0OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8o
bV9ieXRlY29kZUluZGV4KTsKLSAgICAKKwogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVn
VDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotICAgIAorICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUNSwgcmVnVDQpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgYWRkU2xv
d0Nhc2Uobm90SW5kZXgpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcmVnVDEsIHByb2ZpbGUpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRv
IHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdU
MSwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJ
bmRleGluZ1NoYXBlTWFzayksIHJlZ1QxKTsKLSAgICAKLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9
IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNl
IEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3Vi
bGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3Vz
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xv
d0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBM
YWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90
SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91
c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgVU5V
U0VEX1BBUkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFwZSkpOwotICAgIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qy
LCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAg
ICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJ
bnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVn
VDEpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNl
SW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKLSAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QzKTsKLSAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0g
YnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJl
Z1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90
SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1QxLCBm
cFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7
Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAs
IEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAgICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIG91dE9mQm91
bmRzLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDEp
OwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsK
LSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBlY21h
TW9kZSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAg
ZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBwYXls
b2FkCi0gICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSk7IC8vIHRhZwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAot
ICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3Bl
Y2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkp
OwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAs
IEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBqdW1w
KCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0aGlzKTsK
LSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC02MTksMTIgKzQ5NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Cisg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUp
OworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9Owog
CiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjMyLDIxICs1MTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAgIAorICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgr
K107CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0g
bGFiZWwoKTsKLSAgICAKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCiAg
ICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJl
Z2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVu
IG9uIG90aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwot
ICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2FkMihiYXNl
LCByZWdUMiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZh
bHVlLCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJl
Y3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxP
cHRpbWl6ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMiwg
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVn
VDQpLCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CiAKLSAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRh
cmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlv
bkluZGV4Kys7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUpOworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5k
ZXggMzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5
OTAzMTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwog
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlv
bkdldEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAg
ICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsK
KyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Cisg
ICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Cisg
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAg
IHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAg
ICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRv
IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNs
b3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNs
b3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBz
d2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAg
Y2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAg
ICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
U2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsK
KyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRC
eUtpbmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgs
MTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAg
CiAgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3Qo
KSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsK
IAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1
LDEyICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9
CiAKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQp
Cit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVl
LCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7
CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5o
ZWFwKTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAg
ICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNU
eXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFn
ZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3Jl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
eXBlRmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8g
QmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0
OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRl
eGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRl
eGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3Rv
cmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFn
ZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51
bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxs
cHRyKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUu
Y2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUo
KSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHVi
SWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7
Cit9CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVj
bWFNb2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNo
ZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAK
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3Qm
IHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
RGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZklu
QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5C
eUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5p
dEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdl
dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdl
dEJ5S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5k
IGtpbmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVk
RnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRh
cmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5j
dGlvblR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNl
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0g
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVu
Y3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsK
KyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1
bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJn
ZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
OworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlw
ZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAg
RnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0
aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7Cisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0K
IAogICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVk
RnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5k
OjpCeVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsK
KyAgICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhl
Ni4uZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlL
aW5kIHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7
CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAg
ICBCeUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQg
ewogCiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9p
ZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IEdldEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRj
aEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwor
dm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBT
dHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxl
dGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpT
VmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0Zv
dW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsK
IHZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayos
IEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1l
KiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsK
IHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENh
bGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRl
QnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3
YjE1Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJi
YTMwNmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMu
IFRoaXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlT
dGF0dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29k
ZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNo
IHJlZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRo
ICJsbGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1
aXZhbGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>
<flag name="commit-queue"
          id="459024"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436070</attachid>
            <date>2021-08-21 05:09:49 -0700</date>
            <delta_ts>2021-08-21 05:18:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210821050949.patch</filename>
            <type>text/plain</type>
            <size>296295</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OTQ0MjhiODVhNzdjODkyNDM2YTBjNjlkNTYwNmM0NTJlNWM2Mzc1Li5jNTMzYjY3OGZkN2VkMzNi
MTIyZGY3YWRlMTA1NzMyMjBhYmUzNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODcgQEAKKzIwMjEtMDgtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjp0b1R5cGVkQXJyYXlUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50
ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNp
bmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRB
Z2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6
OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRC
eVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRl
Y29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNl
czo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNp
dEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRT
dGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgor
ICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAg
ICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNob29zZUFycmF5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04pOgorICAgICAgICAoSlNDOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRp
cmVjdFB1dEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERl
bGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3Bw
OgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjphcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAg
ICAgICAgKEpTQzo6dHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6cmVwYXRj
aEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAo
SlNDOjpyZXNldFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpyZXNldFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oOgorCiAyMDIxLTA4LTIwICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gU2ltcGxpZnkgbW92
ZUludHNUb0RvdWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGQ2Y2I0MzIy
OTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4zMjNkOGE0MGUxZjZlMjNmY2UyN2VkN2Mw
OGRiNTMyNDczYjI2YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDY0LDkg
KzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVF
MUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYg
LyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkEw
MTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5
QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhB
M0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBU
cmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjMw
M0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyog
Q2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjg2NiwxMSArMjg2NiwxMSBAQAogCQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYz
QzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTUx
NENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRC
eUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlh
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0
QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0UmFjZUtl
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0
ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04Njk1LDEwICs4Njk1LDEwIEBACiAJCQkJMEZEM0U0MDgxQjYxOEI2
NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYxNUNEMjAxQkE1Rjk4
NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNEMjExQkE1Rjk4NjAw
MzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0
dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNw
cCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8s
CiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKIAkJCQkwRjQ0
QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAgKi8sCiAJCQkJMEY0
NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAqLywKQEAgLTEwNTA2
LDggKzEwNTA2LDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZv
a2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJl
TmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0
QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzJBNDE0
Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTNC
NEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNjQ3MDJk
YjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUzMTE3NmY2Mzg1ZWJl
MzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNjks
OCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5dGVjb2RlL1Byb3Bl
cnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKIGJ5dGVj
b2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCi1ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAorYnl0ZWNvZGUv
UHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2Rl
L1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKaW5kZXgg
ZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uZmQ3NDlhZTU4YTdlODQ4
MDhkNDZhN2Q4ZjJmZjU4MTRkZDc0MGUxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVmPEFjY2Vzc0Nhc2U+
IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlw
ZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29uc3QKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRl
eGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFt
cGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250
aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9vbCBBY2Nlc3NDYXNl
OjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEluZGV4ZWRE
b3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVu
dENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTY5LDYgKzY0
NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZlY3RvcjxKU0NlbGwq
PiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBs
YWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6
CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CiAKICAgICBj
YXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0Vt
cHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VS
ZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpAQCAtMTIyNywxNiAr
MTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAg
ICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNo
R1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3Jh
dGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJ
ZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3Jh
dGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzYz
LDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
ICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAg
ICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNo
RlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJs
ZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGlt
ZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0Vt
cHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
I2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBK
U1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlz
RW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAg
ICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4NywyNjkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQo
KTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAg
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVt
cHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNl
IEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNv
ZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBi
YXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUu
dS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3Jw
aGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldy
aXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5k
ZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9j
YXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9Owor
CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmICht
X3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisg
ICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxI
ZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vs
c2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyNlbmRpZgorCisgICAgICAgICAgICBzdG9yZVJl
c3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdz
LCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxI
ZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZTsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRJbnQz
MlN0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBJbnQzMlNoYXBlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IERvdWJsZVNoYXBlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoZXhwZWN0ZWRTaGFwZSkpKTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdp
c3RlcnMoKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgaXNPdXRPZkJvdW5kcy5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIHN0
b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6IHsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAg
ICAgICAgICAgIGF1dG8gbm90SW50ID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsK
KyAgICAgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgYXV0byByZWFkeSA9
IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgbm90SW50LmxpbmsoJmppdCk7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaDJHUFIsIHN0YXRlLnNjcmF0Y2hGUFIp
OworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihz
dGF0ZS5zY3JhdGNoRlBSKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BS
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAg
ICAgICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAg
ICAgICAgICAgcmVhZHkubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVEb3VibGUoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBJbmRl
eGVkSW50MzJTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHBy
b3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKSk7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6
VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIC8vIFdyaXRlQmFycmllciBtdXN0IGJlIGVt
aXR0ZWQgaW4gdGhlIGVtYmVkZGVyIHNpZGUuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQs
IHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlm
IChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CiAgICAgICAgICAgICBpc091
dE9mQm91bmRzLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBpc0VtcHR5LmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogUHJvZmlsZQorICAgICAgICAgICAgLy8gZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgICAgICAgICBqaXQuYWRk
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgICAgICBqaXQuYWRk
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAg
ICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LnN1
YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAgICAgICAgLy8gRklYTUU6IFBy
b2ZpbGUKKyAgICAgICAgICAgIC8vIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxD
YXNlKHByb2ZpbGUpOworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFs
bG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsK
KyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKICAgICAgICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUp
OwogICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFp
bEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNl
IG9yIHRoZSBwcm9wZXJ0eS4KKworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9UeXBl
ZEFycmF5VHlwZShtX3R5cGUpOworCisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRl
LnUucHJvcGVydHlHUFI7CisKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVk
QXJyYXlUeXBlKHR5cGUpKSkpOworCisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVl
UmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNhc2UgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgYXV0
byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBkb3VibGVDYXNlLmxpbmsoJmppdCk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAg
ICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91Ymxl
KHNjcmF0Y2hHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vsc2UKKyAgICAgICAgICAgIHN0YXRl
LmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCB2
YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5k
aWYKKyAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAgICAgIH0KKworICAgICAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAvLyBPdXRPZkJvdW5k
cyBiaXQgb2YgQXJyYXlQcm9maWxlIHdpbGwgYmUgc2V0IGluIHRoZSBvcGVyYXRpb24gZnVuY3Rp
b24uCisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKSk7CisKKyAg
ICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7Cisg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBpZiAoaXNDbGFtcGVkKHR5cGUpKQorICAgICAgICAgICAgc2NyYXRjaDNHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVyc0J5UHVzaGluZygKKyAgICAgICAgICAgIGppdCwgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBqaXQuY2FnZUNvbmRp
dGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBzY3JhdGNoMkdQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUiwgZmFsc2UpOworCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0
cihwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgewor
ICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIUpTQzo6
aXNTaWduZWQodHlwZSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91bmRzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBzY3JhdGNoM0dQUiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGF1dG8gdG9v
QmlnID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW4sIHNjcmF0Y2gzR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgaml0
LnhvcjMyKHNjcmF0Y2gzR1BSLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBj
bGFtcGVkID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB0b29CaWcubGluaygmaml0KTsK
KyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZm
KSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGNsYW1wZWQubGluaygmaml0KTsKKyAg
ICAgICAgICAgICAgICBpbkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZTgoc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBz
Y3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc1R3bykpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91
cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJS
ZWcpOworICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAg
ICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzdGF0
ZS5zY3JhdGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVGbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNo
MkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAgIGppdC5z
dG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZl
ZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yMTgzLDYgKzI1MzcsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNlIENoZWNr
UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNh
c2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAg
ICAvLyBUaGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJhdGVXaXRoR3VhcmQoKSwgc2lu
Y2UgdGhlIGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8vIGFsZ29yaXRobS4gV2UgY2Fu
IGJlIHN1cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRlKCkgZGlyZWN0bHkgZm9yIHRo
ZXNlIHNpbmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFyZGVkIGJ5IHN0cnVjdHVyZSBj
aGVja3MuCkBAIC0yMTk2LDIyICsyNTYzLDMxIEBAIFR5cGVkQXJyYXlUeXBlIEFjY2Vzc0Nhc2U6
OnRvVHlwZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDoKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDg7
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVk
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MTY7CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKICAg
ICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CiAgICAgICAg
IHJldHVybiBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0
dXJuIFR5cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yMjg0LDYgKzI2NjAsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5C
ZVNoYXJlZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFjY2Vzc0Nhc2UmIHJocykKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgIGNhc2UgSW5kZXhlZFN0
cmluZ0xvYWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAppbmRleCA0
MTljOTljOTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJlLi4xODY0NGFkNTEwZjgwYmJk
OTc1MWY4MzY2NzBmZjkwYTkzMTA4NDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAgY2xhc3MgQWNjZXNzQ2FzZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNlPiB7CiAgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
TG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZCwKLSAgICAgICAgSW5k
ZXhlZFN0cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQsCisgICAgICAgIEluZGV4
ZWRJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3RvcmUsCisgICAgICAgIEluZGV4
ZWRDb250aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSwKKyAg
ICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9y
ZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUsCisgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVpbnQ4X3QgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAppbmRleCBmYTBhNmQ1MjNiN2Fk
MGRmODgyMTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAyNTk2YmY2ZWE4ZmY5YThhNzJi
NGRjMmExZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SUNTdGF0dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0
dXNNYXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlua1N0YXR1czsKIGNsYXNzIENv
ZGVCbG9jazsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5CeVN0YXR1czsKLWNsYXNzIFB1
dEJ5SWRTdGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNzIERlbGV0ZUJ5U3RhdHVzOwog
Y2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJbmZvOwpAQCAtNDgsNyArNDgs
NyBAQCBzdHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsU3RhdHVzIHsg
bnVsbHB0ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAg
SW5CeVN0YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAgUHV0QnlJZFN0YXR1cyogcHV0
U3RhdHVzIHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRy
IH07CiAgICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7IG51bGxwdHIgfTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMzYWRkMWZmZTY2Mjc1ZDkxMTQuLjQ3
MTM1MTlkYmE5NGIyMTRmY2U0NTcxMGQ3NmIyMTIzYWZkNzBiNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtMTAy
Miw2ICsxMDIyLDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3Ry
aW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1
ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUg
IkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgi
Ci0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0g
ICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0m
IHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7
Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55
IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0
IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBo
YXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50Lgot
ICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAo
IXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJ
RCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkg
ewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2
bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlk
KTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5m
bzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAg
ICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJv
ZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVT
RURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1Yklu
Zm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAg
ICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9
IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZv
KTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0
ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVz
ZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nl
c3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFj
Y2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxl
OiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJ
bmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxs
TGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlh
bnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAg
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxp
bmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0
RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29k
ZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0
YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2lu
KTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
YmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGlu
ZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJl
c3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRG
cm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBj
YWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQu
aXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICBy
ZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
Y29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlk
LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNl
SW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRT
dGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0
dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8g
c2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNo
IGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJv
dyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmlu
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
TWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFu
cyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGlu
ZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3Qg
Y3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAg
ICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0
aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8v
IFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFBy
aXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVy
IGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAg
ICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxk
LiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlv
biBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRL
aW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEg
dHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAg
Ly8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAg
IC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBj
b3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1
cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGll
cyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVj
dCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0g
ICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9w
dGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlv
biBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJh
bnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAg
Ym9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNl
bmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlm
IChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlm
IChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVt
cGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAo
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFy
aWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5
SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRp
b24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7
Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1h
a2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAK
LSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1w
bGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBl
bmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAg
ICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBm
b3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFu
dC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lk
IFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmlu
dCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2Fz
ZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAi
KSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoK
LSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRG
bGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZv
cm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMK
LSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9J
bmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0
dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQ
YXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0
IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3Jt
YXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0g
TWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVz
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxl
KQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0
dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBj
b250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2Vu
ZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1h
dGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24o
KSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4m
IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXpl
KFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAg
Ci0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQp
Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAg
ICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2
b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFm
YTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNs
dWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6
OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5
SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYg
UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17
Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIu
bV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVy
ZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zm
c2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0g
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVz
ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAg
IHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
b2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsK
LSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50
IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJl
c3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZN
b3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUq
IFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1f
b2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3Ry
dWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewot
ICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAg
bV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0
QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChr
aW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5k
KCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkg
ewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewot
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJp
YW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRy
YW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5l
d1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0g
b3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3Ro
ZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBp
ZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQg
PSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAg
ICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0
aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0
aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0g
ICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlk
VmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwot
ICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBh
bnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAg
IGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJl
Lm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7
Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lm
Q2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZp
bmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2
bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZt
LmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZp
bmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAg
IG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAi
LCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQo
KSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5z
aXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFu
dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5k
IHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9u
LAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
Ci0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
Ci0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwot
ICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVy
ZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29s
IHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2lj
cyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0
aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29u
c3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0
ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAg
fQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2Nh
bGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZN
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tp
bmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xk
U3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0g
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NmJjY2E2N2NmMTg2YzQ2YmRhMDMzMDZiYTA0M2MwNDBmYTdj
YTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUg
IkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6
OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHBy
b2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVk
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lk
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8g
aGF2ZSBhIGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2
YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMg
aXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8g
SUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisK
KyAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CisgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
IGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9u
U2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIs
IHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNp
ZiBFTkFCTEUoSklUKQorUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29k
ZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BB
UkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmln
aW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1Yklu
Zm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoc3VtbWFyeSk7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7Cisg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQor
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAgICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFj
Y2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAg
ICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVy
KCksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
YXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vzcy5pZGVudGlmaWVy
KCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2
YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVz
IGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVy
ZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0
YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRl
RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vz
cy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Cit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywg
Ynl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNp
dGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29u
dGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMg
PSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNz
ID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAg
ICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4
aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0
QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5k
ZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGly
ZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5k
ZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKwor
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAg
ICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVz
dWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJp
YnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQ
cml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFu
cyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVl
ZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4K
KyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1
dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBj
YW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0
CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJl
Y2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5v
dCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAg
ICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lz
IGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0
aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5
IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9u
IGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFT
U0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Cisg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAg
ICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0
aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
KyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBj
b25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAg
cmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCiti
b29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBNYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9zdGF0
ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJpYW50
c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6c2xvd1Zl
cnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0
QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJ
ZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZp
bmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlT
dGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgeworICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQ
YXRoKTsKKyAgICB9OworICAgIAorICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9J
bmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2lt
cGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgeworICAg
ICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBN
YWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgfQorICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1w
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFu
dHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQor
ICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworICAg
IGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRp
b247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAg
ICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1f
dmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCIoTWFr
ZXNDYWxscykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzJhMWM3
M2M4ZjQxY2ExOTJlNThkNGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhp
dEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNz
IFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJ
dCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3Jt
YXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUg
a2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRh
a2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtu
b3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzCisg
ICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9y
bWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3Rh
dGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8
IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5
U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChz
dW1tYXJ5KSB7CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgor
ICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0
aDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRh
a2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2Fs
bHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAg
ICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNv
ZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0
dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxk
UHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29u
dGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4p
OworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9J
bmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsg
fQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJz
aW9uKCkgY29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAx
PiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5n
bGVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0
aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4
KTsKKyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7Cisg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVj
dG9yPFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlW
YXJpYW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQorewor
ICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5t
X2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRl
bnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1
dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJp
YW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmll
cikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtT
dGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAh
PSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2Fy
eSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFj
ZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFy
aWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtp
bmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
aWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAg
ICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJh
bnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsK
KyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNp
dGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5z
aXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2Vk
Q29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlv
blNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVz
IHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExp
bmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9u
U2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFt
ZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25l
U2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExp
bmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2Up
Cit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFj
ZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9v
ZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFT
U0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2Uu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVy
Z2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQg
YSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGls
ZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0
CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhl
IHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNT
dG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5t
X29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVj
dHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9u
ZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQorewor
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVt
cHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAg
ICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAg
b3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRl
eHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIs
ICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZh
cmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtT
dGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBS
ZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAg
IAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
ICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQor
ICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVy
KFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29u
c3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2Fj
aGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xk
U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVj
dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24g
fHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVy
biBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5z
aXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBm
b3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlz
IGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Qg
eyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1w
bGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxM
aW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAh
PSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVy
ZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAg
IEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVy
ZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVs
bHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcu
LmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYy
LDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0
YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewot
ICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0
YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0
dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0
cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxl
dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5
ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3
IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0
YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMq
IGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRk
SW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERl
bGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
RGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsK
ICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1
cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVf
cHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNl
YjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3
ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJs
b2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVz
ZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJ
RChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAg
ICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxv
Y2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4
ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmUyMjU0MGMwOWJjNzgzZTdkOGUwNmQ1M2I3Y2E4MDg3MWVl
NjcyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFs
LAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAg
ICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQx
YzBiNDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4MjEuLjA3YzJkMWYzNWRiMmY1OTQ2
MWE0OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3
LDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1hdGhD
b21tb24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9i
amVjdC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0
cmluZ09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Cisg
ICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBp
ZiAodGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5h
bFZhbHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUo
KSAhPSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBw
ZW5kKApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAg
ICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAg
ICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlW
YXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UodGhpc1NldCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAsMTAgKzQxNDAsMTAgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5n
KCkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBp
c0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8fCBub2RlLT5vcCgpID09IFB1
dFByaXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8gcHJpdmF0ZUZpZWxkUHV0S2luZCA9
IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9kZS0+cHJpdmF0ZUZpZWxkUHV0
S2luZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwotICAgICAgICAgICAgUHV0QnlJ
ZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAg
UHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAg
ICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAg
ICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAg
ICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICAgICAgaXNEaXJl
Y3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0
cnVlOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAg
ICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAg
ICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFy
aWFudHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25T
ZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoQ29uZGl0
aW9uKGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0g
ZmFsc2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh
bnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVj
dHVyZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBo
LmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDczLDcgKzQ0NzMsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1MiwxMCArNDY1MiwxMCBAQCB2b2lk
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJJQ1N0YXR1cyhO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6IHsKICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgICAgICBub2RlLT5w
dXRCeUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgp
KTsKKyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVj
dHVyZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgxNWYxMjdlNzg1OWQ1YTkxNzNi
Li42ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2YjU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTEyNjUsNyArMTI2NSw3
IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1
dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYzZTY4ZDAzN2ZlMTExMDFhZTQx
MmEyNzgyMjUzZjU5NDNiZDYyN2IuLjdmNDAyZTY5N2Y5ZGEwN2E0YzU1YWRhNTEyYzQ3OWRjNGYy
MjM3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIK
LSNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcgKzczLDcgQEAKICNpbmNsdWRlICJQ
cmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAj
aW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2lu
Y2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQu
aCIKQEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICBib29s
IGNoZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQ
cm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBjaGVja1ByZXNl
bmNlRm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAgICAvLyBXb3JrcyB3aXRoIGJvdGgg
R2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAg
Ly8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1
dEJ5VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KICAgICBOb2Rl
KiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7
CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3Qg
UHV0QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI1MywxMyAr
MjUyLDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2b2lkIGhhbmRsZUdldFByaXZh
dGVOYW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAgICAgdm9pZCBlbWl0UHV0QnlJ
ZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUs
ICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOworICAgICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1
dEJ5U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0
QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAg
ICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLAogICAgICAgICBib29sIGlz
RGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAgdm9p
ZCBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25z
dCBQdXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgICAgIE5vZGUqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUq
IHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAg
dm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRp
b24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00NTE0LDcgKzQ1MTMsNyBAQCBO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZSBu
b3QgdG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAvLyB0aGUgc3RydWN0dXJlcyBpbiB0
aGUgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3Vs
ZCBiZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5IHJhcmUgaWYgdGhleSBkaWRuJ3Qp
LiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nCi0gICAg
ICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUg
dHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5SWRTdGF0dXMgd29yay4K
KyAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5
cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlTdGF0dXMgd29y
ay4KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdodCBub3csIGlmIHdlIGhhdmUgYW4g
T1BDUywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0aGlzIHdpbGwKICAgICAgICAgICAg
ICAgICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlIGhhdmUgYSBo
eWJyaWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1OTIsOSBAQCBOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKLU5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlW
YXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NF
UlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNr
UHJlc2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
XSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7CiAgICAgcmV0dXJuIGhh
bmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVl
KTsKQEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5C
eUlkKFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGUKIH0KIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAgTm9kZSogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1
cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwg
Y29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBl
Y21hTW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1
ZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxs
cygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
ZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgocHV0QnlTdGF0dXMu
bWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIp
LCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBj
b25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29k
ZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgY29uc3QgUHV0QnlT
dGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJ
bmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2lt
cGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNj
ZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAg
ICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRC
eVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwot
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRp
ZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkg
PiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3Rh
dHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkg
eworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFr
ZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBP
cHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewotICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkp
IHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRC
eVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZh
cmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3Zhcmlh
bnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygp
OyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBpZiAocHV0QnlTdGF0dXNbdmFy
aWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRT
dGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlz
RGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeVN0YXR1
c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0
LCBlY21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxp
bmVkUHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVz
KGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFk
ZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0
dXMpKSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikK
KyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9m
ZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0g
ICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAg
ICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEt
PmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBo
KE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3Rh
dHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAg
IGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAg
IHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBs
YWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlh
bnQ6OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBzdG9yZShi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwxMiArNTA2NywxMiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKLSAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJ
ZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogewor
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1
cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7
Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01MTM1LDEyICs1MTM0LDEyIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAg
ICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5y
ZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBw
dXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpTZXR0ZXI6IHsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxv
YWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CiAgICAg
ICAgIGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAg
ICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVz
LCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IH0K
IH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0
QnlJZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQorICAg
IGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2
YXRlRmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8
ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGlu
aW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFw
dXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMu
aXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAg
YWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAg
ICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXND
YWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAg
IGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkK
ICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkK
LSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1h
eFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICB8fCBw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5h
bWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwg
YmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MjExLDI5
ICs1MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJ
ZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAg
ICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAgICAg
Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3Jp
Z2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAg
ICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlk
U3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZh
cmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVj
dHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAg
ICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBk
YXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRh
LT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFy
aWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVy
TnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5
T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwot
ICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAg
ICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZh
cmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogeworICAg
IGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmll
bGRQdXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAg
ICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0Rl
ZmluZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVu
dENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFw
aChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVz
ZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBi
YXNlKTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAg
ICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKQEAgLTY0NTQsNDAg
KzY0NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAg
ICAgICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IGZhbHNlOwogCi0gICAgICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9y
aWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVk
IGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAg
ICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4gRm9yIGBwdXRf
cHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8gZnJvbQotICAgICAgICAgICAg
ICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwgdGhhdCB3ZSBjb3VsZCB1c2Ug
aWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0gICAgICAgICAgICAgICAgaWYg
KGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwot
ICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAg
ICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5l
bnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0g
ICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQor
ICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAg
IFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwg
bV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50
aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVy
LmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJv
bENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXND
b25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRl
bnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlk
KSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICBs
b2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7
CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVu
dGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBieXRlY29kZS5tX3B1dEtp
bmQpOworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodHJ5
Q29tcGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5h
bWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5dGVjb2RlLm1fcHV0S2luZCks
IGJhc2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1
dF9wcml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1NiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAg
ICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogCi0g
ICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgcHV0QnlTdGF0dXMgPSBQdXRCeVN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGlu
ZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdp
bigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBo
YW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIG5leHRP
cGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAgICAg
aGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1
aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGRpcmVjdCwgbmV4dE9w
Y29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTc5NzksMTMgKzc5Njgs
MTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZv
cmNlT1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1czsKKyAg
ICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAgICAgICAgICAgICAgICAgaWYgKHVp
ZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZDo6bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOwog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJ
ZFN0YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6OlRha2VzU2xvd1BhdGgpOwogICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxCi0gICAgICAgICAgICAg
ICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJl
cGxhY2UKICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUo
KSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZv
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNv
ZGUubV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChi
eXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODgxOSw0
NSArODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29k
ZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQogICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBCeXRlY29kZTo6b3Bj
b2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJ
ZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
OwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2Rl
T3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwot
ICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBp
biB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAgICAg
Ly8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIGlm
IChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAg
ICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aAotICAgICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBj
b21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5
VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxs
KCkpOworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKworICAgICAgICBQdXRCeVN0YXR1cyBz
dGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3Rh
Y2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7CisgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJl
KHVpZCk7CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAg
ICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlm
aWVyLmNlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxs
KCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcElu
Zm8oZnJvemVuKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIXVpZC0+aXNTeW1ib2woKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQp
LCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHV0QnlJ
ZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAg
ICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCks
IHVpZCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwg
dmFsdWUsIHN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9k
ZSk7CisgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7CiAgICAgICAgIH0KLQot
ICAgICAgICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVz
LCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2VjbWFNb2RlKTsKICAgICB9CiAK
ICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5
NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJn
dW1lbnRzOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmNwcAppbmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5
ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEs
NyBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3
MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5
MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZH
UGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwor
ICAgICAgICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRz
W2ldOwogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNG
aWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1
MTMsOSBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQg
PSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFy
aWFudDo6cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMs
NyArMTIxMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
ICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdl
LCBjaGlsZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVl
LCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
cikKKyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUq
IG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50
JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0g
bm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtu
b3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7
Ci0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFk
ZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJp
YW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNs
YXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+
Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwog
ICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAg
ICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNw
ZWNOb25lLCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwx
MCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
IGlmICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRp
YyksCiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwK
LSAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAg
ICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBw
cml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpA
QCAtMTQyNCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAg
ICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7
CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFu
dEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVG
aWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAg
ICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9u
J3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlz
LgogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0g
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAg
ICBFZGdlKGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3
ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5
U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1
dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRl
OWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5kZTRmMjNmYmFhMGM5NmRiYzhhYWM1
MjQ5MTUzZjk4NmUzOThhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKQEAgLTI4NjUsNyArMjg2NSw3IEBAIGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICBjYXNlIENQVUludHJpbnNpYzoKICAgICAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IGE4NDA2OGU3NzQ2
YzlkYzQzOTQxZTUxYzhlMzE1ZGE3MzVkZmUwZjMuLjBhYTgwZmYwNjFhOTZiMGQ1MzVkNjA4ZjBh
OTUwODc2MzhmODZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBA
IC0zODUsOCArMzg1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAqbm9kZS0+Z2V0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0luQnlT
dGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+aW5CeVN0YXR1cygpKTsK
LSAgICBpZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQotICAgICAgICBvdXQucHJpbnQoY29t
bWEsICpub2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChub2RlLT5oYXNQdXRCeVN0YXR1
cygpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeVN0YXR1cygpKTsKICAg
ICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpLnRv
UmF3KCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggOTEwY2YxMzk5ZmM2YzlkYjFhN2M1NDRmYTFj
YTk4YmQyM2NiM2M2OS4uMTJmMjlmMTA3MTU4YWZiMDBjNjU4YTZkZjQzOWE3OTE4NDJlODgwMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTI1
Miw2ICsyNTIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBsaW5rQnVm
ZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgbGlua0J1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgbGlua0J1ZmZlcik7CisgICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luQnlJZHMsIGxpbmtCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCmluZGV4IDk2YmZjNWEzMDM5YTM2MGZkMTBhYTQwOTRmNTcwNjBhN2Nk
YTlhOTIuLjM2MTc0Nzc4MWZjZDZlNzkxNWU3YTI1OTY4NDY1ZDA3YjY5MWIyOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKQEAgLTE5OSw2ICsxOTksMTEg
QEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICAgICAgbV9w
dXRCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+KGdl
biwgc2xvd1BhdGgpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZFB1dEJ5VmFsKGNvbnN0IEpJVFB1
dEJ5VmFsR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKKyAgICB7
CisgICAgICAgIG1fcHV0QnlWYWxzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlW
YWxHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKKyAgICB9CisKICAgICB2b2lkIGFkZERlbEJ5
SWQoY29uc3QgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xv
d1BhdGgpCiAgICAgewogICAgICAgICBtX2RlbEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBw
ZXI8SklURGVsQnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwpAQCAtMzYwLDYgKzM2NSw3
IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgVmVjdG9y
PElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+LCA0PiBtX2dl
dEJ5SWRzV2l0aFRoaXM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeVZh
bEdlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBw
ZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlJZHM7CisgICAgVmVjdG9yPElubGlu
ZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4sIDQ+IG1fcHV0QnlWYWxzOwogICAg
IFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlJZEdlbmVyYXRvcj4sIDQ+IG1fZGVs
QnlJZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeVZhbEdlbmVyYXRv
cj4sIDQ+IG1fZGVsQnlWYWxzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUSW5C
eUlkR2VuZXJhdG9yPiwgND4gbV9pbkJ5SWRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAKaW5kZXggZWM1YThmYjZlYWNlMjlkMzVlZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQw
Zi4uMmJkNGFlNDUzNTA0Y2Q2Yjc4ZDhkOTFlMjQ5YjIwZmE3MzBjM2M4YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRXhpdE1v
ZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBTdGF0ZVR5cGUmIHN0YXRl
KQogICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBG
aWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKaW5kZXggYWMyYjRiNWYwMjgzOWM4YWJhYTFkMzliMzUxZDI3N2ExOWJkMWM5YS4u
N2NhYTIwMjAxMmRjYTU4YmRiOTg2OTU4NjQ0NmEyNDhhNThlMzNkMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZh
dGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgorI2luY2x1ZGUg
IlB1dEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFZhcmlhbnQuaCIKICNp
bmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgpAQCAt
OTIsNyArOTIsNyBAQCBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogCiBzdHJ1Y3QgTXVsdGlQ
dXRCeU9mZnNldERhdGEgewogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgVmVj
dG9yPFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50
LCAyPiB2YXJpYW50czsKICAgICAKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsK
ICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwpAQCAtMzIxMCwxNSArMzIxMCwx
NSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxJbkJ5U3RhdHVz
Kj4oKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNQdXRCeUlkU3RhdHVzKCkKKyAgICBib29s
IGhhc1B1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEZpbHRlclB1
dEJ5SWRTdGF0dXM7CisgICAgICAgIHJldHVybiBvcCgpID09IEZpbHRlclB1dEJ5U3RhdHVzOwog
ICAgIH0KICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRCeUlkU3RhdHVzKCkKKyAgICBQdXRC
eVN0YXR1cyogcHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1B1dEJ5SWRT
dGF0dXMoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mby5hczxQdXRCeUlkU3RhdHVzKj4oKTsK
KyAgICAgICAgQVNTRVJUKGhhc1B1dEJ5U3RhdHVzKCkpOworICAgICAgICByZXR1cm4gbV9vcElu
Zm8uYXM8UHV0QnlTdGF0dXMqPigpOwogICAgIH0KIAogICAgIGJvb2wgaGFzRGVsZXRlQnlTdGF0
dXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IGU3NWJjZmU4
YTFhYzM3MWEwMmU1NjU0OTZiOTg3OGQ5ODdlZTRhZDAuLjlhOTBhNGNmZGFjOGYyMzUxODI4NzIy
NGVkYmVlNWZkODlmNjQzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKQEAgLTU0Niw3ICs1NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhGaWx0ZXJHZXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZp
bHRlckluQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGaWx0ZXJQdXRC
eUlkU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRmlsdGVyUHV0QnlTdGF0
dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJEZWxldGVCeVN0YXR1cywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggYjFjZmVlOGFjZWMz
OGNjMDVhNDE2ZWFiZWJiOWUyMjIzNWUxN2U4Yi4uMjg5NzM3OGJmOTg1OGIxYzRjZmE2YTMxMTAy
OGNiYTBjYmVkZGY2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjE1LDIxICsyMTUsNiBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVC
bG9jayogYmFzZWxpbmVDbwogCiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJD
YWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogewotICAgICAg
ICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWwpIHsK
LSAgICAgICAgICAgICAgICAvLyBXZSBjb21waWxlIG9wX3B1dF9ieV92YWwgYXMgUHV0QnlJZCBh
bmQgaW5saW5lcyBTZXR0ZXJDYWxsIG9ubHkgd2hlbiB3ZSBmb3VuZCBTdHJ1Y3R1cmVTdHViSW5m
byBmb3IgdGhpcyBvcF9wdXRfYnlfdmFsLgotICAgICAgICAgICAgICAgIC8vIEJ1dCBzdGlsbCBp
dCBpcyBwb3NzaWJsZSB0aGF0IHdlIGNhbm5vdCBmaW5kIFN0cnVjdHVyZVN0dWJJbmZvIGhlcmUu
IExldCdzIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8uCi0gICAgICAgICAgICAgICAg
Ly8gMS4gQmFzZWxpbmUgQ29kZUJsb2NrIChBKSBpcyBjb21waWxlZC4KLSAgICAgICAgICAgICAg
ICAvLyAyLiAoQSkgZ2V0cyBERkcgKEIpLgotICAgICAgICAgICAgICAgIC8vIDMuIFNpbmNlIChB
KSBjb2xsZWN0cyBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHB1dF9ieV92YWwsIChCKSBjYW4gZ2V0
IFN0cnVjdHVyZVN0dWJJbmZvIGZyb20gKEEpIGFuZCBjb3BtaWxlIGl0IGFzIGlubGluZWQgU2V0
dGVyIGNhbGwuCi0gICAgICAgICAgICAgICAgLy8gNC4gKEEpJ3MgSklURGF0YSBpcyBkZXN0cm95
ZWQgc2luY2UgaXQgaXMgbm90IGV4ZWN1dGVkLiBUaGVuLCAoQSkgYmVjb21lcyBMTEludC4KLSAg
ICAgICAgICAgICAgICAvLyA1LiBUaGUgQ29kZUJsb2NrIGlubGluaW5nIChBKSBnZXRzIE9TUiBl
eGl0LiBTbyAoQSkgaXMgZXhlY3V0ZWQgYW5kIChBKSBldmVudHVhbGx5IGdldHMgQmFzZWxpbmUg
Q29kZUJsb2NrIGFnYWluLgotICAgICAgICAgICAgICAgIC8vIDYuIChCKSBnZXRzIE9TUiBleGl0
LiAoQikgYXR0ZW1wdHMgdG8gc2VhcmNoIGZvciBTdHJ1Y3R1cmVTdHViSW5mbyBpbiAoQSkgZm9y
IFB1dEJ5SWQgKG9yaWdpbmFsbHksIHB1dF9ieV92YWwpLiBCdXQgaXQgZG9lcyBub3QgZXhpc3Qg
c2luY2UgKEEpJ3MgSklURGF0YSBpcyBjbGVhcmVkIG9uY2UuCi0gICAgICAgICAgICAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZEJ5VmFs
SW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYnlWYWxJbmZvKTsKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gYnlW
YWxJbmZvLT5kb25lVGFyZ2V0LnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8o
Q29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3R1YkluZm8pOwogICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5kb25lTG9j
YXRpb24ucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
CmluZGV4IDY2NzgzNTU1ZGYyMTZkMThmOTBjNTk1NDZlYzc5MmQ1MGQ4ZmQ1OGEuLjFmNDE4MzE4
YTRjMGRlYzZkMmU5OWQ0MDlmNzFkYWZhNDY5N2IyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcApAQCAtMTI1OCw3ICsxMjU4LDcgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGaWx0ZXJD
YWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CkBAIC0yNTU0LDE1ICsyNTU0LDEzIEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRo
b3NlIG5vZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRo
aXMgbWVhbnMgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwg
d2UgY2FuIHNpbXBseSB0cnVzdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0
IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUg
d2UgYXJlIHVzaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBw
ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9m
ZnNldCA9IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuY2xlYXIo
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0
LmFkZChzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1
cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
cmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKQEAgLTI2MTUsNyArMjYxMyw3IEBAIGNsYXNzIE9iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAppbmRleCAxNjIyZGQ4YjFiNTIxY2M0MWRmYTg1YWI1MzI2MmVjZTgwZmU3NGYyLi44
OWU1ZWY0ZDg1MWVjOTBkNmQ5ODU1Y2E0N2NhNWJjNzgyNTcyZmZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAgY2xhc3MgUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjYXNlIFdlYWtNYXBTZXQ6CiAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBj
YXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAppbmRleCAxZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwLi5kNTQ5
NjQ0NTBiNjMyMjc0ODk4ZDY4YzhhOWJlOWY3YTc2Zjk4MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggM2UzMjQ3ZjhjNjkyNmQyOTdiNmNh
MmNmMTRlMmQ2YjVkOTkzZWI2Yi4uNjAzZmY3YjJlNTJkY2VlZTNiYzM2NWRiYzRlZTMzYjNjMzdl
MWQyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1By
aXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDg4MDhiMTBjODI2YzUxMDY5Nzk3NDAwOWU5NmYxOTlm
YThmMTBhNGMuLmM4ZmMxNTc0MTU5ZDQ0NmNkZWM4OWU4N2NkNzE4ZDMwYTUyMDE2OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApA
QCAtNTg3MSw3ICs1ODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDU0MTBkOTA4
OTZkYzRmMDEwNTc5MzBkZjgyZjY2MTkyYjgxZjZjMGYuLmM1ZTVjZjM2YTc3MGQxNTgzYjY5M2Rm
ZDg4MWQ2NDI0YWIxN2JjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCkBAIC0zMTIsOCArMzEyLDggQEAgY2xhc3MgVmFsaWRhdGUgewogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIXZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRjaCgp
KTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggZmRhNjRkMzVkYTM0
Mjg4OWM3OThjMDUxZTk1NzZlOGExZTMzYTM5Yi4uZjFhMzgwOWQ3ZWZlMzBmOGQ1OWJhMjFmYWNk
MDcwOWU0MzhiOTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgY2xhc3Mg
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgpAQCAtNDIxLDcgKzQyMSw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBj
YXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDAzZjg2NTJjNmNiODJj
NjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMuLjgzYjUxYmE5Y2Y3NjVkYTA0NjM3M2E3OWIxY2Ew
MzMwYzQzYzdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDVhM2U5OGY3NTM3MDFkM2IzNGY4
NGI5ODA4M2QyNGRhZThlZjcxMDAuLmMzOWYyZGRmMzc1MzYzMWIxNTI4NTExYWJjOTBlNzFhNTBh
MzA3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTE2NDksNyArMTY0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC04OTUxLDcgKzg5NTEsNyBAQCBjbGFz
cyBMb3dlckRGR1RvQjMgewogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAg
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJT
dHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSk7CiAgICAgICAgICAgICAgICAgYmFz
ZVNldC5hZGQoc3RydWN0dXJlKTsKQEAgLTg5NjYsMTYgKzg5NjYsMTYgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBk
YXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07
CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAK
ICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
LCB2YXJpYW50LmtpbmQoKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFu
dC5raW5kKCkpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCku
YWRkTGF6aWx5KAogICAgICAgICAgICAgICAgICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtODk4Nyw3ICs4OTg3LDcg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQ
cm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygp
LmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCku
aW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL0RTTC5yYgppbmRleCA2OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4
Li43OGZkNDk0M2Y5ZWNiYzRjMzVjN2NkY2IzMmI3Mzc3Y2FiOWYxZWQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTQxLDcgKzE0MSw3IEBAIGRlZiBzZWxmLndy
aXRlX2J5dGVjb2RlX3N0cnVjdHMoYnl0ZWNvZGVfbGlzdCwgYnl0ZWNvZGVfc3RydWN0c19maWxl
bmFtZSkKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJP
cGNvZGUuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUHV0QnlJ
ZEZsYWdzLmgiCiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmgKaW5kZXggZjA0YzFmNDI4ZTEwYmZjNzFmYTVjZTM1ZTAwMjg2OGJiNzhhZGVm
Ni4uOTFiM2IzMTU1MTBkYTY4MjRiM2M5NjM0MTBlMzM2ZDk1ODlhYmM3YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9JQ1N0YXRzLmgKQEAgLTY3LDEwICs2NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KSBcCiAgICAgbWFj
cm8oT3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUp
IFwKICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkUHV0UHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RP
cHRpbWl6ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRBZGRBY2Nlc3NDYXNlKSBcCi0gICAgbWFjcm8o
UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCkgXAotICAgIG1hY3JvKFB1dEJ5SWRTZWxmUGF0Y2gpIFwK
LSAgICBtYWNybyhJbkJ5SWRTZWxmUGF0Y2gpIFwKKyAgICBtYWNybyhQdXRCeUFkZEFjY2Vzc0Nh
c2UpIFwKKyAgICBtYWNybyhQdXRCeVJlcGxhY2VXaXRoSnVtcCkgXAorICAgIG1hY3JvKFB1dEJ5
U2VsZlBhdGNoKSBcCisgICAgbWFjcm8oSW5CeVNlbGZQYXRjaCkgXAogICAgIG1hY3JvKERlbEJ5
UmVwbGFjZVdpdGhKdW1wKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMpIFwK
ICAgICBtYWNybyhPcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKaW5kZXggYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThlZmE0
NzEzMi4uNTBkZTg1NWI2YWM5MGVlNmQzZDFjOTYxZTQ0ODQ4MjM5NWE0NjE2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcApAQCAtNTEwLDYgKzUxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgbV9nZXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2dldEJ5
SWRXaXRoVGhpc0luZGV4ID0gMDsKICAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRC
eVZhbEluZGV4ID0gMDsKICAgICBtX2luQnlJZEluZGV4ID0gMDsKICAgICBtX2luQnlWYWxJbmRl
eCA9IDA7CiAgICAgbV9kZWxCeUlkSW5kZXggPSAwOwpAQCAtNjYyLDYgKzY2Myw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRC
eUlkSW5kZXggPT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0
QnlJZFdpdGhUaGlzSW5kZXggPT0gbV9nZXRCeUlkc1dpdGhUaGlzLnNpemUoKSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fcHV0QnlWYWxJbmRleCA9PSBtX3B1dEJ5VmFscy5zaXplKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1faW5CeUlkSW5kZXggPT0gbV9pbkJ5SWRzLnNpemUoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9pbnN0YW5jZU9mSW5kZXggPT0gbV9pbnN0YW5jZU9mcy5zaXplKCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPT0gbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5zaXplKCkpOwpAQCAtOTA5LDYgKzkxMSw3IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZm
ZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsK
KyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKaW5kZXggNjQ0MGZmMjQxMGYwMzcyZDFiNWZiN2YwNTc3ZmQ3MGY0OWUyMDU1OC4uMjZhZmZk
YTU3YzQwOTViNDkxYWJiNTQxZjI2MjdiMWJmMGE2MWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCkBAIC0yMjUsMjggKzIyNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZm
b3J0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQu
bV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFs
V2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4
ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0
S2luZCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTI2OCwxMCArMjQ2LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNz
UHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxX
aXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVh
YmxlSWRlbnRpZmllcik7CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVO
YW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIENhY2hlYWJsZUlk
ZW50aWZpZXIpOwogCkBAIC0zODQsMzYgKzM1OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJl
Z2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKICAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2Zp
bGUqKTsKLSAgICAgICAgCi0gICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJy
YXlQcm9maWxlKik7Ci0gICAgICAgIAotICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwg
YmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KLSAgICAgICAg
Ly8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQt
Y2hlY2tlZCBhbmQKLSAgICAgICAgLy8gemVyby1leHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNr
ZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLgotICAgICAgICAvLyByZXR1cm5zIHRo
ZSBzbG93IGNhc2VzLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVt
cExpc3QgZW1pdEludDMyUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5m
bywgSW50MzJTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSwgYnlWYWxJbmZvLCBEb3VibGVTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRHZW5lcmljQ29udGln
dW91c1B1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyopOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5
cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qLCBUeXBlZEFycmF5VHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTEwNjQsNiArMTAwOCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SklUR2V0QnlWYWxHZW5lcmF0b3I+IG1fZ2V0
QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiBtX2dl
dEJ5SWRzV2l0aFRoaXM7CiAgICAgICAgIFZlY3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1
dEJ5SWRzOworICAgICAgICBWZWN0b3I8SklUUHV0QnlWYWxHZW5lcmF0b3I+IG1fcHV0QnlWYWxz
OwogICAgICAgICBWZWN0b3I8SklUSW5CeUlkR2VuZXJhdG9yPiBtX2luQnlJZHM7CiAgICAgICAg
IFZlY3RvcjxKSVRJbkJ5VmFsR2VuZXJhdG9yPiBtX2luQnlWYWxzOwogICAgICAgICBWZWN0b3I8
SklURGVsQnlJZEdlbmVyYXRvcj4gbV9kZWxCeUlkczsKQEAgLTEwOTEsNiArMTAzNiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5VmFsSW5kZXggeyBVSU5UX01B
WCB9OwogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRXaXRoVGhpc0luZGV4IHsgVUlOVF9NQVgg
fTsKICAgICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXggeyBVSU5UX01BWCB9OworICAgICAg
ICB1bnNpZ25lZCBtX3B1dEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25l
ZCBtX2luQnlJZEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5VmFs
SW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2RlbEJ5VmFsSW5kZXggeyBV
SU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRleCA2OWJmMWExYzNmOGExYTM5MTY5YzZkMzk5YzJiMGM2
NzZjODhjZjY0Li5hOTBjODY5ZDM5Nzk5NzZjNmZmYTZlZGQyM2ZjMzI2MzQ0MmY1OWYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgCiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICAg
ICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJ
bmZvR1BSKQorICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBj
b2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlJZCwgdXNlZFJlZ2lzdGVycywg
YmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQogICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUp
CiAgICAgICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCiB7CkBAIC0zODEsNiArMzgxLDY3IEBAIHZv
aWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBM
aW5rQnVmZmVyJiBzbG93UGF0aCkKICAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9z
dHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOwogfQogCitKSVRQdXRCeVZhbEdlbmVyYXRv
cjo6SklUUHV0QnlWYWxHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0
VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgs
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5k
KQorICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5k
ZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCisgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2Rl
KQorICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCisgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAsIG1f
dmFsdWUodmFsdWUpCit7CisgICAgbV9zdHViSW5mby0+aGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisKKyAgICBtX3N0dWJJbmZvLT5iYXNlR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7Cisg
ICAgbV9zdHViSW5mby0+cmVncy5wcm9wZXJ0eUdQUiA9IHByb3BlcnR5LnBheWxvYWRHUFIoKTsK
KyAgICBtX3N0dWJJbmZvLT52YWx1ZUdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSID0gc3R1YkluZm9HUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBtX3N0dWJJbmZvLT5iYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICBtX3N0
dWJJbmZvLT52YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8tPnYu
cHJvcGVydHlUYWdHUFIgPSBwcm9wZXJ0eS50YWdHUFIoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQp
Cit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOworICAgICAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOworICAgIH0gZWxzZQorICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVK
dW1wKCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKK3ZvaWQgSklUUHV0QnlWYWxH
ZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93
UGF0aCkKK3sKKyAgICBCYXNlOjpmaW5hbGl6ZShmYXN0UGF0aCwgc2xvd1BhdGgsIGZhc3RQYXRo
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3RhcnQpKTsKKyAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCisgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0
ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK30KKworVl9KSVRPcGVyYXRp
b25fR1NzaUpKQyBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbigpCit7Cisg
ICAgc3dpdGNoIChtX3B1dEtpbmQpIHsKKyAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAg
ICAgICAgaWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAg
IGlmIChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RP
cHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAg
ICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIC8vIE1h
a2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5l
cmF0b3I6OkpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgYnJhbmQsIEdQUlJl
ZyBzdHViSW5mb0dQUikKICAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4
IGVlNjgxNDEwMWE4MWViZDE1NWJmNGRiNjkzZmY0N2M4YTI3OGY3ZmIuLjMwNWI3MGQzZjkyYjFm
ZTNiNWE2NjdkYjMzNDRiYjY2N2Q2ZmI0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKQEAgLTEyOSw5ICsxMjksNyBAQCBj
bGFzcyBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdl
bmVyYXRvciB7CiAKIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklU
QnlJZEdlbmVyYXRvciB7CiBwdWJsaWM6Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvcigpCi0gICAg
ICAgIDogbV9lY21hTW9kZShFQ01BTW9kZTo6c3RyaWN0KCkpCi0gICAgeyB9CisgICAgSklUUHV0
QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1Zh
bHVlUmVncyBiYXNlLApAQCAtMTQyLDEwICsxNDAsNDIgQEAgY2xhc3MgSklUUHV0QnlJZEdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKICAgICBWX0pJVE9wZXJhdGlv
bl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKLSAgICBFQ01BTW9kZSBt
X2VjbWFNb2RlOworICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkg
fTsKICAgICBQdXRLaW5kIG1fcHV0S2luZDsKIH07CiAKK2NsYXNzIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKKyAgICB1c2luZyBC
YXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CitwdWJsaWM6CisgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigKKyAgICAg
ICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNz
VHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgRUNNQU1vZGUsIFB1dEtpbmQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3dQ
YXRoSnVtcC5tX2p1bXAuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3Nsb3dQYXRoSnVtcC5t
X2p1bXA7CisgICAgfQorCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExp
bmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CisKKyAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKworICAgIFZfSklUT3BlcmF0aW9uX0dT
c2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOworCitwcml2YXRlOgorICAgIEVDTUFNb2RlIG1fZWNt
YU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKKyAgICBQdXRLaW5kIG1fcHV0S2luZDsKKwor
ICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7Cit9OworCiBjbGFzcyBKSVREZWxCeVZhbEdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiAgICAgdXNpbmcgQmFz
ZSA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAppbmRleCA3NzQ0YjUwODM3YWVhN2JhMDg1YTAxMzQ1ZmJiZjJiNjhi
ZjBkNDI1Li43N2FmNWIxMzNmNDVmYjExZDQwNWIzNjk5MmJlMGM3MjgwNjRhMDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMzY0LDI0ICszNjQsNiBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5
UHJvZmlsZSogYXJyYXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlubGluZSBKSVRBcnJheU1vZGUg
SklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIGF1dG8g
YXJyYXlQcm9maWxlU2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhpbmdUeXBl
IGNhcGFiaWxpdHkpIHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdU
eXBlZEFycmF5cyhhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAgICB9OwotCi0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlN
b2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7Ci0g
ICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAg
IHJldHVybiBKSVREb3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJ
bnQzMlNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2Zp
bGVTYXcoYXJyYXlNb2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklU
QXJyYXlTdG9yYWdlOwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCiBBTFdBWVNfSU5M
SU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDI0ZDlmNWVk
Zjg3MTU4MzhkNzc1YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2MzI4MWUzNWRmZTU1ZmFlMjA2
MTAwYTE1ZGE5NzE5YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCkBAIC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2
bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0
QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVw
YXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwg
aWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5v
dERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlm
aWVyKSkKQEAgLTc1MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplYwogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJ
RChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRj
aFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRl
bnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlm
aWVyKSkKQEAgLTc4Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYgogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJ
RChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0
KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZp
ZXIpKQpAQCAtODEzLDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlE
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3Qp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmllbGRDYWxsYmFjaz4KQEAgLTg4
OCw3ICs4ODgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAogICAgICAgICBBU1NFUlRfVU5V
U0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
b2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZSk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwg
cHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwxNiArOTI0LDE1IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNj
ZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkp
OwogCiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9j
aywgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlE
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1
dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKICAgICB9KTsK
IH0KIAotc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBwdXRCeVZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBF
Q01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkp
IHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50
MzJfdCBpID0gKmluZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtOTQy
LDcgKzk0MSw4IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmls
ZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAg
ICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1
dEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmlj
dCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiArOTUxLDMwIEBAIHN0YXRpYyB2
b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZh
bHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZVZh
bHVlLnB1dEJ5SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3Qo
KSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9IAorICAgIH0KKwogICAgIGlmIChzdWJzY3JpcHQu
aXNOdW1iZXIoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0g
ICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+
YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAg
ICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7
CiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNl
cHRpb24uCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGlm
IChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFi
bGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkg
IT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0K
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9i
amVjdCwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGljIHZvaWQgZGlyZWN0UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
RUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBl
Y21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7
Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMy
X3QgaW5kZXggPSAqbWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0Y2ggKGJhc2VPYmplY3QtPmlu
ZGV4aW5nVHlwZSgpKSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91
dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKQEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEoKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKLSAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBQdXREaXJlY3RJ
bmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hl
YWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBi
eVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZv
LT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIENv
bW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VP
YmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIzLDIyNiArMTAxOCwyMDYgQEAg
ZW51bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdpdmVVcCwKIH07CiAKLXN0YXRp
YyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgcHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSog
cHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7Ci0KLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBP
cHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpOb3RPcHRpbWl6ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5pbmRl
eGluZ01vZGUoKSkpCi0gICAgICAgIHJldHVybiBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsK
LQotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotCi0gICAg
ICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDAp
KTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLQotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYg
KGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0
ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBq
aXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRB
cnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+
YXJyYXlNb2RlKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJl
KTsKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2Rl
QmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsK
KyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VP
YmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUo
YmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZt
KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVj
dCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYg
d2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0
cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAg
ICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6
ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0K
KyAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNl
bGwoc3Vic2NyaXB0KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAg
ICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29u
dGV4dCgpKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBDYWNoZWFibGVJZGVu
dGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKLSAgICAgICAg
Y29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShn
bG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6
YXRpb25SZXN1bHQ6OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8
fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5m
by0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgp
ID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRC
eVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2
ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vl
bk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVC
ZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0
SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAg
ICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwg
aWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYm
IG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0g
ICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0
IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBt
aXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRp
bmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9m
IG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIHB1dF9i
eV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4g
aWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFs
SW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQotICAgIHJldHVybiBvcHRp
bWl6YXRpb25SZXN1bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChn
bG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1v
ZGUpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBl
Y21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwog
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQp
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0
aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisgICAgcHV0QnlWYWxPcHRpbWl6
ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAK
LXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBw
cm9maWxlKSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXpp
bmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAgICBwdXRCeVZhbE9wdGltaXpl
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKwor
c3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAg
ICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgo
MCkpOwotICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgIFJFTEVB
U0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVj
dCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4
aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0g
ICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0
dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERp
cmVjdChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewor
ICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vi
c2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VP
YmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNo
aW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAo
cHJvZmlsZSkgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxl
LT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7
Ci0KLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZt
LCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAg
ICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZDsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXBhdGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBo
YXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBl
dmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQg
IT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKENhY2hl
YWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewog
ICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUt
PmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VS
VCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5z
ZWVuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0g
cHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFs
V2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgUHV0S2luZDo6RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAg
ICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpPcHRpbWl6ZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAg
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZl
VXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVu
T25jZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0
KCkpOworCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRo
czo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAg
ICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBi
YXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2Ny
aXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5n
Qnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAg
ICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0
dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtp
bmQ6OkRpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVk
ICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7
Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRo
b3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhh
dCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNl
cHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRo
IG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIGdl
dF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2
ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5
VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwg
c3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIAotICAgIHJldHVybiBvcHRp
bWl6YXRpb25SZXN1bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6
YXRpb25SZXN1bHQgcmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcCkgewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KIAot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBk
aXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1v
ZGU6OnN0cmljdCgpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVD
TUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxP
YmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7
CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUs
IEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQ
YXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSog
cHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRp
b25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVl
KTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGds
b2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9k
ZTo6c2xvcHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOwotICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFz
ZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisKKyAgICBz
dHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2Jh
bE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwg
RUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVl
OworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUp
LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCcmFuZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CmluZGV4IDI1ODRlOTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgxZDVmMTk5OTguLmVmYmQ4ODcz
NTQyZmMzZjRiZTgzZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywxNSBAQCBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZQogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZh
dGVOYW1lT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1
dEtpbmQpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5h
bWVHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5k
KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUp
KTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOworCitKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVy
aWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxl
KikpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNv
ZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRUNNQU1vZGUpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJu
VHlwZSwgKENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA1
NjY4ZGZiZTQxZDEyYTkyMjRhNDNjMDg4MTM0ZTNjYzVjODRjYzdlLi4wMGU3Njg0NzlkNzA1MjFl
M2VlMjNlYzRmNThhNjJkMDQ0NGQ0ZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3NyArNDM4LDMxIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBi
eXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92
PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0g
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0
ZWNvZGVJbmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3Rh
bnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkK
LSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVn
VDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwotCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5k
ZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAg
ICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJK
dW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJ
Zk5vdEludChyZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAg
emVyb0V4dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQogICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwogCi0gICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1F
OiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklU
QXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoICht
b2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMy
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRC
eVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzKSwgcmVnVDIsIGVjbWFN
b2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRT
bG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAg
IExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8u
YXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBu
b3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlw
ZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsK
LSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlw
ZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJl
Y3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5n
U2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLQotICAgIAot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
LQotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAg
Y2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50
MzIocmVnVDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7
Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMyk7Ci0gICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFk
eSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZDY0KG51
bWJlclRhZ1JlZ2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QzLCBm
cFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7
Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAs
IEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTY0KHJlZ1QzLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIG91dE9mQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMp
OwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlT
dG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJ
bmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgICAgICAgICAgZmFy
SnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlz
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVt
cHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVz
dWx0KHRoaXMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29k
ZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1w
KCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkp
OwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0KLSAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW5k
LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2Vs
aW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAt
NjYxLDEyICs1MTUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2Rl
IGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAg
ICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAg
ZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc0
LDE2ICs1MzEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAg
IGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1
dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVn
VDIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC02OTQsMjggKzU0OSwyNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1v
ZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbElu
Zm8pLCBieVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVl
KCkpLCBlY21hTW9kZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBj
YWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CiAg
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChpc0RpcmVjdCA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTczNiwxOCArNTg5LDE4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1l
bnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3Vt
ZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2Jq
ZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFs
dWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RH
UFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVH
UFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAo
QWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0
aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsKIApAQCAtODA5LDEzICs2
NjIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUxLDE0ICs3MDQsMTQgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVu
dEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtp
bmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAg
aml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1p
emUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlW
YWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBA
IC0zMjkwLDgyICszMTQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhS
ZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVl
ZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
ewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5
VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRl
Y29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29u
dGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRl
Y29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmll
ciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBl
ID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYg
KGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50
NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8g
QmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVk
QXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBl
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJh
cnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0
KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2Zh
ckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09
IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAg
ICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZh
bHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxp
bmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkp
OwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0Rp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5B
ZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4o
cmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
KSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5v
dGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0
IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxh
dGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlN
b2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlW
YWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFBy
aXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewog
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0
MDcsMjIzICszMTg0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEKICAgICB9CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
LXsKLSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJ
RCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGly
ZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0g
ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUs
IGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywg
bV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAg
aWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7Ci0gICAgICAgIGlmIChj
YWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZy
b20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNp
dGUgOiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0g
ICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAg
YnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAg
IG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAg
ICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3Qp
ID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9D
U3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUo
KSk7Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAg
ICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5kID09IFB1dEtpbmQ6OkRp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJu
QWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+
KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09
IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25s
eSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5j
cHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMg
aW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtp
bmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0
dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwotICAgIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQg
cHJvcGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwot
ICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVT
Y3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0
Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVn
aXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewot
ICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAg
ICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRh
cmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUu
bGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JU
eXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVG
b3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1
bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0g
ICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAg
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBl
YXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJs
eVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJs
eVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2Ny
YXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGlu
dG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBh
dGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRj
aCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBs
YXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAg
ICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBl
KSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKLSAgICAgICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVz
dGVkSW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIHhvcjMyKGVh
cmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVtcCBjbGFtcGVkID0ganVtcCgp
OwotICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MHhmZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQubGluayh0aGlzKTsKLSAgICAg
ICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwg
QmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4
KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3Jh
dGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0Zsb2F0
KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsK
LSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNj
cmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAg
UmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lz
dGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9
IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAg
ICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlm
IChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMy
KEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUo
dHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8t
Pm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAg
ICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0
ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNj
cmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBs
YXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5s
aW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFu
Y2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3VibGUoZWFy
bHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgIGRvdWJs
ZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVy
KGVhcmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0
Y2gpOwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVh
ZHkubGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBl
YXJseVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIobGF0
ZVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdU
MCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUludHNUb0RvdWJsZShlYXJs
eVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwot
I2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBh
cyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0
cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAg
Y2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRj
aCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBzd2l0Y2gg
KGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBjb252ZXJ0RG91Ymxl
VG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBC
YXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgo
bGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93
Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCmluZGV4IGI5OGJmZWNlZGFhNTU2MDFmOTVhODhiZWRhNjFiMDlmMWEzNDM0NzEuLmZi
ZTFhMDM3ZjI5ZDJjM2Y4ZGIzYWRhOTIxOWNhYTVmODcxYjYzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDY2
LDE1MCArNDY2LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Cisg
ICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQg
cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERp
cmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgCisKICAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKKyAg
ICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9maWxlKTsKLSAgICAKLSAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6
IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGluZT8KLSAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsKLSAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0gICAgCi0gICAg
SklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNo
IChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdElu
dDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBt
X2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBk
b25lKSk7Ci19CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
KQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihDb250aWd1b3Vz
U2hhcGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwot
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN3aXRjaCAoaW5kZXhpbmdT
aGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMs
IHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAg
c3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIo
cmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1Qy
LCByZWdUMyk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAg
ICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDEpOwotICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBq
dW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50c1RvRG91
YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOYU4oZnBSZWdUMCkpOwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBz
dG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LSAgICAKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9y
ZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QzLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0
b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAg
cmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgVU5VU0VE
X1BBUkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwg
SW52YWxpZEdQUlJlZywgZWNtYU1vZGUsIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1f
cHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFs
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgIAotICAgIExhYmVsIHN0b3Jl
UmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN0
b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKLSAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QwKTsK
LSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0g
ICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNjE5LDEyICs0OTYsMTUg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNN
QU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAK
ICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6
OmVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTYzMiwyMSArNTEyLDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZh
bHNbbV9wdXRCeVZhbEluZGV4KytdOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCisKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKwogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMg
Y2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBp
bmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1pdExvYWQoYmFz
ZSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsK
KyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1Qw
KTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUu
dmFsdWUoKSkpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAg
ICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmExMzQ1ZjY5Nzgw
MDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQxOTQzZjhjODFkN2YyNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQgQEAgdm9pZCBy
ZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgYXV0byBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlL
aW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAgIHN3aXRjaCAocHV0S2luZCkg
ewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OwotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0g
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQ
cml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1
dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJU
KHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5k
OjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFw
cHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBl
KCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCitzdGF0aWMgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1v
ZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6
Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBzd2l0Y2gg
KHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBzd2l0Y2gg
KHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQg
Y29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5k
LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDggKzcyMyw4IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRj
aCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQ
dXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFz
ZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRB
Y2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3ND
YXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkg
PyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwg
V1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29k
ZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1
bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
awogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIGlmICh0cnlDYWNoZVB1
dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQot
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYgKHRyeUNh
Y2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdp
dmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwg
cHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheVB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAg
ICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBn
bG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZt
KS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4Ogor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
SW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1p
emUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAg
ICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAg
ICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlNo
YXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50
MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91Ymxl
U2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRE
b3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29u
dGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNN
QU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VX
aXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOwor
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRj
aHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBw
dXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxl
dGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
RGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCkBAIC05ODYs
NyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAg
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzU2LDI4ICsxODkx
LDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQogfQogCi12b2lkIHJlc2V0UHV0
QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
dm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRl
Y2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAgIEZ1bmN0
aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5
cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBl
KCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlv
blR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBl
PihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNl
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
KQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAg
ICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVp
bnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2Nr
LCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMxOWYwMmQ0ZDQwMTk1ODFlNWE5
NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhjZjY4ZDc5
YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC00Myw2ICs0MywxMSBA
QCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5hbWVCeUlkLAogfTsKIAorZW51
bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCit9OworCiBlbnVtIGNs
YXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApAQCAtNTYsNyArNjEsOCBAQCBl
bnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2Jh
bE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoUHV0QnlJRChKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1dEtpbmQp
Owogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBEZWxl
dGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9pZCByZXBhdGNo
SW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1
YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxP
YmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wg
d2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBAQCB2b2lkIGxp
bmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtDYWxsKFZN
JiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2b2lkIHJlc2V0
R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCBy
ZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRQ
dXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7CiB2b2lkIHJl
c2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQpOwogdm9p
ZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2
b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
aAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNiLi43MmU3YjA3
OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcgKzMyLDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9mIGFsaWFzIGZv
ciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGVyZSBpcyBj
b2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5jcHApCisvLyBi
ZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeVN0
YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0aW5nIHRoZW0g
dG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBpbXBsZW1lbnRh
dGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhpcwogLy8gYWxp
YXMgaGVyZS4K
</data>
<flag name="commit-queue"
          id="459026"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436071</attachid>
            <date>2021-08-21 05:15:48 -0700</date>
            <delta_ts>2021-08-23 00:14:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210821051547.patch</filename>
            <type>text/plain</type>
            <size>296167</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OTQ0MjhiODVhNzdjODkyNDM2YTBjNjlkNTYwNmM0NTJlNWM2Mzc1Li5jZDgzM2RjMGE4NGUxMTdh
NDM0MWM3MjA0ODJjMDNjNWU3MzcyOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDgtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5r
VG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJz
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojpv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJp
YW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQ
dXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFu
dDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlND
OjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwp
OgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAg
KiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZh
bCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVy
YXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZh
bEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmNob29zZUFycmF5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAo
SlNDOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUpOgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjphcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNo
ZVB1dEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEFycmF5UHV0QnlWYWwp
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6cmVwYXRjaFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQp
OiBEZWxldGVkLgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oOgorCiAyMDIxLTA4LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gU2ltcGxpZnkgbW92ZUludHNUb0RvdWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGQ2Y2I0MzIyOTI3ZjIyMTVhNjMyZDM4
OTNiZGM5YzM4MjVmYTdhLi4zMjNkOGE0MGUxZjZlMjNmY2UyN2VkN2MwOGRiNTMyNDczYjI2YTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCTBG
OTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2
NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0
dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMz
Mjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjND
NiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5MzMyQTQxNENB
N0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0
Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzQjRBQTE4Qjky
QzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJp
YW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJE
IC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJB
QkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjMwM0ExRDQxOTJDODAwNTYw
OUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjg2
NiwxMSArMjg2NiwxMSBAQAogCQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbExpbmtTdGF0dXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2
IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTYx
NENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRC
eVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5
QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJ
ZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0UmFjZUtleS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRSYWNlS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04Njk1LDEwICs4Njk1LDEwIEBACiAJCQkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFBy
b3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYxNUNEMjAxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1
dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNEMjExQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5
SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3Rh
dHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5j
cHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50Lmgg
Ki8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLywK
KwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLywKKwkJCQkw
RjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8sCiAJCQkJMEY5RkM4QzEx
NEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKIAkJCQkwRjQ0QTdBRDIwQkY2ODVGMDAy
MkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAgKi8sCiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAw
MjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAqLywKQEAgLTEwNTA2LDggKzEwNTA2LDggQEAK
IAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2
MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNjQ3MDJkYjYwMWNjMjFhYmI0YzI2
Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUzMTE3NmY2Mzg1ZWJlMzRjY2IzMWE1MDVjMTkx
ZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNjksOCArMjY5LDggQEAgYnl0
ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNw
cAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKIGJ5dGVjb2RlL1B1dEJ5SWRGbGFn
cy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCi1ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAorYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNw
cAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3Bh
Y2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKaW5kZXggZmE4YjZiMjJlM2E0ZTJk
Yzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uNzYyOGNiMzBlMWRmZTNiMzAyMzNjZWY5MGI3ZGM3
ZjhkY2U2MjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVmPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgQ2FjaGUKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwcm90b3R5
cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yNzIsNiAr
Mjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2tTa2lwcGlu
Z0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3Vz
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0lk
ZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSW50
MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9vbCBBY2Nlc3NDYXNlOjpuZWVkc1NjcmF0Y2hG
UFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEluZGV4ZWREb3VibGVMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6
CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MTUsNiAr
NTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAg
Y2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTY5LDYgKzY0NywxOSBAQCBib29sIEFj
Y2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmtJ
ZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVk
U3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAg
ZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVwbGFjZToKQEAg
LTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vz
c0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CiAKICAgICBjYXNlIE1vZHVsZU5hbWVz
cGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hh
cGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzT3V0
T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0VtcHR5OwotCiAgICAgICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVy
cyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAg
ICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpAQCAtMTIyNywxNiArMTMyOCwxNiBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgcHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAgICAgaml0Lnplcm9F
eHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAg
ICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAg
ICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
ICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gz
R1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5
KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzYzLDIxIEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUg
PT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICAgICAgICAgIGppdC5s
b2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAg
ICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5z
Y3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNo
RlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFs
dWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5j
aElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBl
bmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgICAgIGppdC5t
b3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAg
ICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3Jh
dGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAgICAgICAgICBq
aXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAg
ICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpA
QCAtMTI4NiwxNiArMTM4NywyNjkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0
LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRv
ci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZEln
bm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRp
Z3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTogeworICAgICAg
ICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBz
dWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9w
ZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsK
KworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAg
ICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOworICAgICAg
ICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
LCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGlzT3V0T2ZC
b3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhz
Y3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNl
cnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9
IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9OworCisgICAgICAgIENDYWxs
SGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhl
ZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
KworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRj
aDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMu
YXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vsc2UKKyAgICAgICAgICAg
IGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgSlNWYWx1ZTo6
b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKSk7CisjZW5kaWYKKworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7CisgICAgICAgICAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICAg
ICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICAgICAg
ICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAg
ICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4cGVjdGVk
U2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGlzT3V0
T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNh
c2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBhdXRv
IG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICAg
ICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRl
LnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0Lm1v
dmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQ
UikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAg
aml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRh
Z0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJlYWR5
LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHBy
b3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91Ymxl
KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6
CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2Ny
YXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVl
KHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsK
KyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBl
bWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0
ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobV90eXBlID09IElu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgewogICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5r
KCZqaXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOworICAgICAgICAgICAgLy8g
RklYTUU6IFByb2ZpbGUKKyAgICAgICAgICAgIC8vIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9s
ZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1Rv
KHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUz
MihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAo
KS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9maWxlCisgICAgICAg
ICAgICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsK
KyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJv
cGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gy
R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJl
c3VsdCwgJmppdCk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1
c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJl
dXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAg
IHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAg
QVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3Vj
aCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVy
dHkuCisKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90
eXBlKTsKKworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BS
OworCisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBl
KSkpKTsKKworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAg
ICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdz
KTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQu
anVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFk
ZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBz
dGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQ
UigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Cisg
ICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2
YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAg
ICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVu
Z3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5
UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBz
dGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0
b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkKKyAgICAgICAgICAgIHNjcmF0Y2gzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVk
U3RhdGUgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50
YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hH
UFIsIGZhbHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocHJvcGVydHlHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGlm
IChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUp
KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3Jh
dGNoM0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9IGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRvb0JpZyA9IGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuLCBzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGppdC54b3IzMihzY3JhdGNo
M0dQUiwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gY2xhbXBlZCA9IGppdC5q
dW1wKCk7CisgICAgICAgICAgICAgICAgdG9vQmlnLmxpbmsoJmppdCk7CisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZiksIHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
aW5Cb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHNjcmF0Y2gz
R1BSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0Nh
bGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAx
OgorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMTYodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNUd28pKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3Jh
dGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc091
dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGlzRW1w
dHkpOworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAg
ICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3RhdGUuc2NyYXRjaEZQUiwg
c3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc3RhdGUu
c2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoc3Rh
dGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE4Myw2
ICsyNTM3LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgLy8gVGhlc2UgbmVl
ZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBp
cyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBzdXJlIHRoYXQg
bm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBzaW5jZSB0aGV5
CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tzLgpAQCAtMjE5
NiwyMiArMjU2MywzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNlOjp0b1R5cGVkQXJyYXlU
eXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xh
bXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToK
ICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAg
cmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZs
b2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2
NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMjI4NCw2ICsyNjYwLDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVTaGFyZWQoY29uc3Qg
QWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAg
IGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNDE5Yzk5YzkwZjQzOTAx
ODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uMTg2NDRhZDUxMGY4MGJiZDk3NTFmODM2NjcwZmY5
MGE5MzEwODQzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2UgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVp
bnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQsCiAgICAgICAg
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIEluZGV4ZWRTdHJpbmdMb2Fk
CisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRleGVkSW50MzJTdG9yZSwK
KyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRleGVkQ29udGlndW91c1N0
b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisgICAgICAgIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUs
CisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUsCisgICAgICAgIElu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlLAorICAgICAgICBJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZs
b2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUsCiAgICAg
fTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdhZDBkZjg4MjExMDdmZTNi
ODQ5MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcyYjRkYzJhMWQxODkyMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKQEAgLTM2
LDcgKzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFz
cyBHZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQdXRCeUlkU3RhdHVzOwor
Y2xhc3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IElD
U3RhdHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7IG51bGxwdHIgfTsKICAg
ICBHZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEluQnlTdGF0dXMqIGlu
U3RhdHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxw
dHIgfTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIERlbGV0
ZUJ5U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA4
MTA0YTJmMzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40NzEzNTE5ZGJhOTRiMjE0
ZmNlNDU3MTBkNzZiMjEyM2FmZDcwYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTEwMjIsNiArMTAyMiw0NSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNz
VHlwZSB0eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZEludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVT
dG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmlu
dCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQz
OWM3YTRlYTZlNjFjZjU2NDhhZWZhYzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3Rh
dHVzLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklD
U3RhdHVzVXRpbHMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlk
U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewot
ICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19
Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMu
c2hyaW5rVG9GaXQoKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVk
QmxvY2stPnZtKCk7Ci0gICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2Ug
YXJlIG5vdCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1
dF9wcml2YXRlX25hbWVgLgotICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhp
cyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElD
IGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWlu
c3RydWN0aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1
cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3Ry
dWN0dXJlSUQpOwotCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5t
X25ld1N0cnVjdHVyZUlEOwotICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpOwotICAgIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKLSAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAg
IGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9m
ZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKGRpZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJ
ZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFy
ZXN1bHQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVO
QUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4
aXQpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1Q
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBs
b2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEpCi17Ci0gICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHVi
SW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFp
c0lubGluZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1h
cnkpOwotICAgIAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1w
dGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAg
Y2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCks
IG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlw
ZTo6U3R1YjogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51
LnN0dWI7Ci0gICAgICAgIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAg
cmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQ
cm94eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdl
dENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3
U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCksIHVpZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChj
b21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdl
dFN0YXR1czo6U2hvdWxkU2tpcDoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
SlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVz
ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFj
Y2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxv
Y2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0g
UHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25T
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsK
LSAgICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9t
VmFsdWVTZXR0ZXI6Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29y
U2V0dGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMp
OwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQo
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkp
OwotICAgIH0KLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENv
ZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1
c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9
IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAg
ICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAg
ICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAot
ICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+
IFB1dEJ5SWRTdGF0dXMgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29k
ZU9yaWdpbikpIHsKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0
ID0gY29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxp
bmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2Uo
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVz
LnN0dWJJbmZvKSB7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQt
Pm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+
b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0
YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpz
dGF0dXMucHV0U3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFz
ZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2Fs
bEV4aXRTaXRlRGF0YSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0
S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChz
ZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsK
LSAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2V0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0
W2ldOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9
IEdsb2JhbE9iamVjdFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLQotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmli
dXRlcyk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAg
IC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFBy
aXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5z
IHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVk
IHRvIHRha2UgCi0gICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgot
ICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZh
bHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwot
Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNz
b3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8
IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0
aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdh
dGNocG9pbnQgc2V0LgotICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBo
YXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAg
ICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJl
IHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAg
Ly8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVk
IHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxl
YXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQg
aW4gc2V0IG1vZGUgYW5kIGl0Ci0gICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVj
dHVyZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWlu
ZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0
YWtlCi0gICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBn
ZXRzIGV4ZWN1dGVkLgotICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAg
ICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJl
Zm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdh
bnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNo
ZSBwdXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8g
c29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAg
ICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4K
LSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNE
aXJlY3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgp
KTsKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVy
ZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRv
LgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0
cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNT
RVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5k
ID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJh
bnNpdGlvbigKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlv
blNldCwgb2Zmc2V0KSk7Ci0gICAgICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQ
dXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBN
YWtlc0NhbGxzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAh
PSBTaW1wbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tp
XS5tYWtlc0NhbGxzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dW
ZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkg
PyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0
QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUg
dm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1
dEJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUo
dm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhl
cikKLXsKLSAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhp
cyA9IFB1dEJ5SWRTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8g
TWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoICht
X3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVy
OwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBp
ZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93
KCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6
IG90aGVyLm1fdmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhl
cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAg
ICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBU
YWtlc1Nsb3dQYXRoOgotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdl
U2xvdygpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkK
LXsKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0
ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlv
blRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7
Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0
aW9uKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAg
ICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5w
cmludCgiKFRha2VzU2xvd1BhdGgpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2Vz
Q2FsbHM6Ci0gICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2
OWFjNTcxM2RjOGU4ZjhiNjQ0MDAwY2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1
ZGUgIklDU3RhdHVzTWFwLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2lu
Y2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpT
R2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1j
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7
Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVk
IHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAg
ICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAg
ICAgU2ltcGxlLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRo
LgotICAgICAgICBUYWtlc1Nsb3dQYXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2Ug
cGF0aHMgdGhhdCBtYWtlIGNhbGxzLgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAK
LSAgICBQdXRCeUlkU3RhdHVzKCkKLSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRl
KQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRl
ID09IE1ha2VzQ2FsbHMpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVz
KFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5
KSB7Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAg
ICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6
OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xv
d1BhdGhBbmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCkKLSAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAg
ICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNv
ZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0
dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBD
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0g
ICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
LCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAg
IFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsg
fQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsg
fQotICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFr
ZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2Fs
bHMoKSBjb25zdDsKLSAgICBQdXRCeUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAg
Ci0gICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXpl
KCk7IH0KLSAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAot
ICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRp
ZgotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwg
Qnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBh
cHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0Zp
dCgpOwotICAgIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50
LCAxPiBtX3ZhcmlhbnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjQ1NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFm
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlh
bnQuaCIKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGlu
ZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFu
dChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17
Ci0gICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50
OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9
IG90aGVyLm1fa2luZDsKLSAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJl
OwotICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25k
aXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1f
b2Zmc2V0OwotICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtT
dGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZSgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5k
ID0gUmVwbGFjZTsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5
SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQg
PSBUcmFuc2l0aW9uOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsK
LSAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3Rh
dHVzKQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0g
U2V0dGVyOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1
bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
b2Zmc2V0OwotICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0
YXR1cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFu
dDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0
dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVj
dHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAg
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFu
dDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgp
ICE9IFRyYW5zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VS
VChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9v
bGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1
Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0
dXJlID0gbnVsbHB0cjsKLSAgICBtX2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0
ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9j
YWxsTGlua1N0YXR1cyk7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVy
ZXMoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9u
OgotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojpy
ZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJp
YW50OjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsK
LX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIG90aGVyKQotewotICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5v
dFNldDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwot
ICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJl
cGxhY2UoKnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAg
ICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0
aW9uV2l0aFJlcGxhY2Uob3RoZXIpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogewotICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3Ry
dWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRD
b25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9u
U2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
U2V0dGVyOiB7Ci0gICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMg
fHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlu
a1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNl
dC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25T
ZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1l
cmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlu
a1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxh
Y2UpCi17Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVw
bGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2Uu
bV9vZmZzZXQpOwotICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAg
IEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxh
Y2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2Yg
bWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBh
ZGQgYSBuZXcgZmllbGQgd2hpY2gKLSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3
aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vz
bid0Ci0gICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYg
dGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0
ZXNTdG9yYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFj
ZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0
cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25l
d1N0cnVjdHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0p
Ci17Ci0gICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2Vk
KG1fbmV3U3RydWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlk
VmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBz
d2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxl
bXB0eT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0g
ICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRT
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5D
b250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6
Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQo
c3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2Nv
bmRpdGlvblNldCwgY29udGV4dCksICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBtX29mZnNldCk7Ci0gICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExp
bmtTdGF0dXMpOwotICAgICAgICBvdXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVl
NWYwYTFkZTQwOGE1ZmJiZDFjYjdhYjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDYWxsTGlua1N0YXR1czsKLQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5v
dFNldCwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0
dGVyCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5k
KE5vdFNldCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1f
bmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFy
aWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRv
cj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBy
ZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBz
dGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAg
ICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9
PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1
Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBv
bGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRy
YW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1
cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBi
b29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMg
KGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxh
dGVkIGhlbHBlcnMuCi0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5v
SW50cmluc2ljOyB9Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBl
cnMuCi0gICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBD
YWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiBvdGhlcik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0
QnlJZFZhcmlhbnQmIHJlcGxhY2UpOwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3Bl
cnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAg
ICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDZiY2NhNjdjZjE4NmM0NmJkYTAzMzA2YmEwNDNjMDQwZmE3Y2EwMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAK
QEAgLTAsMCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHlt
b3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitib29sIFB1dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1f
dmFyaWFudHMsIHZhcmlhbnQpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgp
Cit7CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRC
eVN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52
bSgpOworICAgIAorICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNl
IG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJl
dHJpZXZpbmcgTExJbnQgaW5mb3JtYXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAg
ICAgICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGlu
IGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVk
IGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE5vSW5mb3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnRpZmllciA9ICYocHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmlt
cGwoKTsKKworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1
Y3R1cmVJRDsKKyAgICBpZiAoIXN0cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJl
SUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICgh
bmV3U3RydWN0dXJlSUQpIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29k
ZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAg
ICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
CisgICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1
Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkK
K1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOworICAgIAorICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKKyAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGRpZEV4
aXQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNv
ZGVJbmRleCkpLnN0dWJJbmZvOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JT
dHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgY2FsbEV4
aXRTaXRlRGF0YSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJv
bUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShtYXApOworICAg
IFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0
YSk7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworI2VuZGlmIC8vIEVO
QUJMRShKSVQpCit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1Yklu
Zm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Cit7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBiYXNl
bGluZUJsb2NrLCBzdHViSW5mbywKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0
U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKK30K
KworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4
aXRTaXRlRGF0YSkKK3sKKyAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0
dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKKyAgICBpZiAo
IWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKHN1bW1h
cnkpOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1w
dGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgIAorICAgIGNh
c2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAgICAgIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyog
bGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAgICBQdXRCeVN0YXR1cyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVz
ZXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
YWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJl
KCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFu
dCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUs
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJp
YW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9u
OiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gYWNjZXNzLm5ld1N0
cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRp
b25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5z
dXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9
IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRlbnRpZmllcigpLCBhY2Nlc3Muc3Ry
dWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3Rh
dHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTog
eworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExp
bmtTdGF0dXM+KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5m
bygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIs
IHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigp
LCBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMu
Y29uZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0
U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAg
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgp
OworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQg
OiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0
KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3Qg
UHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0dXMgeworICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBQdXRCeVN0
YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LAorICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICBiYXNlbGlu
ZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJl
c3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRG
cm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHJlc3Vs
dDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0
U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBi
bGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb21wdXRl
Rm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBj
YWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVG
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZp
ZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQoreworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQorICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1
bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNp
emUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAg
ICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9i
amVjdFR5cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CisKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUo
KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAK
KyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3Qg
aGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlk
YCBkZWZpbmUgbW9kZQorICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVm
aW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAg
ICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBp
ZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYg
KGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJl
cGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGls
bFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xs
IGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAg
ICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBl
eGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdv
aW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0
IGZyb20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBl
dmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhp
bmd5LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQg
dGFrZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFy
aWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNl
IHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAgICAgICAvLyBz
aG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5z
IHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHBy
aXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhy
b3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAgaWYgKHByaXZh
dGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3Jl
IGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkK
KyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCisgICAg
CisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMu
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIElmIHRoZSBzdHJ1
Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVu
IGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHBy
b3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5
IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNp
dGlvbiBpcyBjYWNoZWQgdG8uCisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAg
ICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICgh
dHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAg
IGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFu
c2l0aW9uKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQpKTsKKyAgICAgICAgaWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtU
b0ZpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1
czo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJp
YW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxs
cygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBm
YWxzZTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRh
a2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVzOjpzaW5n
bGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmllckZvcklD
U3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJp
YW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRF
KFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlT
dGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQdXRCeVZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0p
Cit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAg
ICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjptZXJnZShj
b25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9J
bmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gbWVyZ2VTbG93ID0g
WyZdICgpIHsKKyAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90
aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CisgICAgfTsK
KyAgICAKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246Cisg
ICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBTaW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAg
ICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAgICAgICAgICAgIGlmICgh
YXBwZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygp
OworICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgTWFrZXNDYWxsczoKKyAg
ICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICBy
ZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOworICAg
IGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFu
dC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJpYW50
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2b2lk
IFB1dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQo
IihOb0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
U2ltcGxlOgorICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6Cisg
ICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyYTFjNzNjOGY0MWNhMTkyZTU4
ZDRiZTFkZTE2NjEzZDkwMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgiCisjaW5j
bHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisj
aW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2NsYXNzIEpT
R2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hhaW47Citj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7
CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBz
byB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAorICAgICAg
ICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisgICAgICAg
IFNpbXBsZSwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4K
KyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBh
dGhzIHRoYXQgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscworICAgIH07CisgICAgCisg
ICAgUHV0QnlTdGF0dXMoKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAg
ICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1h
a2VzQ2FsbHMpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdHViSW5m
b1N1bW1hcnkgc3VtbWFyeSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAg
ICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgICAgIG1f
c3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgorICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
TWFrZXNDYWxsczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Ns
b3dQYXRoOgorICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5k
TWFrZXNDYWxsczoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIFB1dEJ5U3RhdHVzKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFy
aWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFu
dHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRG
bGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgUHV0QnlTdGF0
dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIENhY2hl
YWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYsIENv
ZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29t
cHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFz
ZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luKTsKKyNlbmRpZgorICAg
IAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0K
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1h
dGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNp
bXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBib29sIG1h
a2VzQ2FsbHMoKSBjb25zdDsKKyAgICBQdXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0Owor
ICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMu
c2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4mIHZhcmlhbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgYXQo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNv
bnN0IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGF0KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xlSWRlbnRpZmllcigp
IGNvbnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJik7
CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorI2lmIEVOQUJM
RShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3RhdGljIFB1dEJ5U3RhdHVz
IGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIHZvaWQgc2hyaW5r
VG9GaXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZlY3RvcjxQdXRCeVZhcmlh
bnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjA3
YzUzNWIzNzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCkBAIC0wLDAg
KzEsMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorCisj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQor
ICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sKKyAgICAqdGhpcyA9IG90
aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1
dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIubV9raW5kOworICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29u
ZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVl
PENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgZWxzZQorICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lkZW50aWZpZXIgPSBvdGhl
ci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQdXRCeVZhcmlhbnQgUHV0
QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQ
dXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0
QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RG
TW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgIHJlc3VsdC5tX25ld1N0
cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCit7
CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1
bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92
ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBQ
dXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRT
dHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1
cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUHV0
QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlm
IChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxhY2U7CisgICAgbV9jb25k
aXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OndyaXRlc1N0
cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFu
c2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5VmFyaWFu
dDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQdXRCeVZh
cmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVy
OworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlWYXJp
YW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lkZW50
aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2lkZW50aWZpZXIgJiYg
KG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAgICAgQVNTRVJUKG1fY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1
cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAg
ICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7CisgICAgICAgICAgICBp
ZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykp
IHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRp
b246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFj
ZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFj
ZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAg
ICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9
IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAg
ICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb25k
aXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6IHsKKyAg
ICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAh
PSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRD
b25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRo
KG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9u
U2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0
aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAKKyAgICAgICAg
aWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJn
ZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAgICAgICBtX29sZFN0cnVj
dHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0
aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKQoreworICAgIEFTU0VS
VChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJl
cGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKKyAgICBB
U1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBBU1NFUlQoIXJlcGxhY2Uu
cmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3Jr
cyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdo
aWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBh
dGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAorICAgIC8vIHdvcmsg
aWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGgg
aXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOworICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVZh
cmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1faWRl
bnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JF
R0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
dXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9vbGRT
dHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlKQor
ICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBs
YXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBpZiAoIW1fb2xk
U3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExp
dmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMg
JiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
Kwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8Iik7CisgICAgb3V0
LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmlu
dCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAg
ICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBvdXQucHJp
bnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4
dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Cisg
ICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOworICAgICAg
ICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgKQEAgLTAs
MCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVT
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rU3RhdHVzOworCitjbGFz
cyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAg
ICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAgICAKKyAgICBQdXRCeVZh
cmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgICAgICA6IG1fa2luZChO
b3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAgICAgLCBtX25l
d1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmllcihXVEZNb3ZlKGlkZW50
aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5
VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5VmFyaWFu
dCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0
aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3Ry
dWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICBz
dGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAgICAKKyAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAg
ICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBS
ZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1
cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAg
CisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBT
ZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRT
dHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFRyYW5z
aXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVz
KCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKKyAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0K
KyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0
IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVk
IGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50
cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMu
CisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBDYWxs
TGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQo
KTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFyaWFudCYg
b3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5VmFyaWFudCYg
b3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lk
ZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1faWRlbnRp
ZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZp
ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxh
Y2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAgICBLaW5kIG1fa2luZDsK
KyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1
Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CisgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAppbmRl
eCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3Li5mY2UwZjRkOGVlMTBl
ZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02MiwxMCArNjIsMTAgQEAg
R2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAotUHV0
QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBzdGF0dXMpCitQdXRCeVN0
YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsKLSAgICBhdXRvIHN0YXR1
c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsKLSAgICBQdXRCeUlkU3Rh
dHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBzdGF0dXNQdHIgPSBtYWtl
VW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3RhdHVzKiByZXN1bHQgPSBz
dGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29kZU9yaWdp
biwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNyw2
ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBh
aXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIg
OiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAg
ICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCmluZGV4IGJk
MTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0OTgzZGJjNzY3ZDA3ZTI4
MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
IkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJJ
bkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5
U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAg
CiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4m
LCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVzKiBhZGRHZXRCeVN0YXR1
cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsKLSAgICBQdXRCeUlkU3Rh
dHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRCeUlkU3Rh
dHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4m
LCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFkZEluQnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBEZWxldGVCeVN0YXR1cyog
YWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVz
Jik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyYpOwpA
QCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAgCiAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9w
dHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7CisgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0dXM+Pj4gcHV0czsKICAg
ICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxJbkJ5U3RhdHVz
Pj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0
cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzPj4+IGNoZWNrUHJp
dmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZjZWIyM2RjM2NjMjFkMzI3
ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRmNzgxOWQ0NzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogYwogICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0R2V0QnkoY29kZUJs
b2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJsb2NrLCAq
dGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICByZXNldFB1dEJ5
KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2Nr
LCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJsb2NrLCAqdGhpcywgSW5C
eUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEyOGU2ZTI1MDFhYWIxOGU1
NWQ0MWE0Li5lMjI1NDBjMDliYzc4M2U3ZDhlMDZkNTNiN2NhODA4NzFlZTY3MjI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaApA
QCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdl
dEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZhbCwKLSAgICBQdXQsCisg
ICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAg
ICBIYXNQcml2YXRlTmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3Mzkw
MzU5ZGQzMGMwY2U2OGMxMWMxN2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJj
NzQ0NmM3N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiSlNQcm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5j
bHVkZSAiTnVtYmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNs
dWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIK
QEAgLTM5NzMsNyArMzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAg
ICBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50c1tpXTsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9
ICptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAg
ICAgICAgIHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNF
bXB0eSgpKQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAg
ICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJh
bnNpdGlvbikgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0
dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0
dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAs
NyArMzk5MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAv
LyBlbHNlIHRoaXMgaXMgcmVhbGx5IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQu
YWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFj
ZSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC00MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1f
c3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2Rl
LT5vcCgpID09IFB1dEJ5SWREaXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5
SWQ7CiAgICAgICAgICAgICBhdXRvIHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09
IFB1dFByaXZhdGVOYW1lQnlJZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZh
dGVGaWVsZFB1dEtpbmQ6Om5vbmUoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVz
ID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAg
dmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2Rl
LT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2Fj
aGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmll
bGRQdXRLaW5kKTsKIAogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEs
NyArNDE1MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZl
Y3RvciB0cmFuc2l0aW9uczsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52
YXJpYW50cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24p
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2
MiwxNCArNDE2MiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFsbEdvb2QpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlv
bnMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKQEAgLTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6IHsKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5t
X3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygp
LT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAg
ICBub2RlLT5wdXRCeVN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1
cmVTZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5k
ZXggYzIxNmEzOTZkNzE2MDQyMGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQz
ODE1OWNjYjFiMWQzOTM3MTUzODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00
MDIsNyArNDAyLDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1
dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBj
YXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAppbmRleCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQz
YmQ2MjdiLi43ZjQwMmU2OTdmOWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRmMjIzNzZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVh
bkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlW
YWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRl
Y29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCkBAIC03NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJn
ZXRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5
SWRGbGFncy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0
YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZh
dGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEg
KzIzOCwxMSBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNl
KEpTT2JqZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2Uo
Tm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CiAgICAgCi0gICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBh
bmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGgg
Ym90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxh
dGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFy
aWFudFR5cGUmKTsKIAotICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0
b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYs
IE5vZGUqIHZhbHVlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFy
c2VHZXRCeUlkKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFz
cyBCeXRlQ29kZVBhcnNlciB7CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgR2V0QnlTdGF0dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJ
ZFN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJv
b2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSog
dmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNv
ZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJp
dmF0ZU5hbWVCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1
cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3Qg
UHV0QnlTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVs
ZXRlQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVC
eVN0YXR1cywgRUNNQU1vZGUpOwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmxvYWQoCiAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhl
IHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxs
IG9mCiAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCkgYWdyZWUgb24gdGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAg
ICAgICAgICAvLyBoaWxhcmlvdXNseSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdl
IGFyZSByZWx5aW5nIG9uIHN0cnVjdHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8v
IGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNh
dXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAg
ICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJl
IGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogcmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUg
bW9ubyBwcm90by4gSG93ZXZlciwgdGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0
byBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3Ry
dWN0dXJlIGZvcgpAQCAtNDU5Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6Omxv
YWQoCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6
c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFu
dCwgTm9kZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVw
bGFjZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zm
c2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNl
dChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5
ICs0OTk3LDM5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVn
aXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmVtaXRQdXRCeUlkKAotICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0
dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3Rh
dHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAg
ICAgaWYgKGlzRGlyZWN0KQogICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UK
LSAgICAgICAgYWRkVG9HcmFwaChwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRG
bHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFz
ZSwgdmFsdWUpOworICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/
IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFN
b2RlKSwgYmFzZSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0
YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0
SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0
YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2Rl
IGVjbWFNb2RlKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkp
IHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0
YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25z
Ojp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQo
KSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBl
Y21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBw
dXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxz
KCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYg
KCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAg
ICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAg
ICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9s
eW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlv
bnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFy
aWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTsp
IHsKLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQo
KSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgdmFyaWFudEluZGV4ID0gcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4
LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2lu
ZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJ
bmRleF0uY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1v
ZGUpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4
XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtNTAzOSwyOCArNTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAg
ICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsK
IAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9y
aWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwog
Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3Rh
dHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVy
ZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBt
X2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52
YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFu
dHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVt
YmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zm
c2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAg
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBB
U1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZh
cmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlh
bnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAg
ICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5y
ZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBw
dXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7
CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmll
ck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5j
b21waWxhdGlvbigpKSkKQEAgLTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNl
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFz
ZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykp
LCBiYXNlKTsKIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAg
ICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVy
LCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAK
LSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNl
cygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykp
LCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRv
R3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMp
KSwgYmFzZSk7CiAKICAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3Ro
ZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRl
ZFZhbHVlKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1
ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVj
bWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUx
ODQsMjYgKzUxODMsMjYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICB9CiAgICAgCiAgICAgZGVmYXVsdDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0Rp
cmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0
YXR1cyYgcHV0QnlTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2lu
ZCkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAg
ICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNT
aW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNj
ZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0
UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQ
dXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9n
cmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlm
IChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgu
bV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8
fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8
fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0Fj
Y2Vzc0lubGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVt
VmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6
ZSgpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZv
KGlkZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlm
IChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5j
b21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRU
b0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlk
U3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBm
b3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50
cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlT
dGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBw
dXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlT
dGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50
aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZv
KGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
QVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5
U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkg
ewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFy
aWFudDo6UmVwbGFjZTogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1Nl
dCgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNl
KTsKICAgICAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwg
dmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAg
LTUyNDEsOSArNTI0MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uOiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246
IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNo
ZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wg
dHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAg
IFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENv
ZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxp
bmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRo
YXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAs
IHdlIG1pZ2h0IGhhdmUgc29tZSBpbmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJ
QywgaW5jbHVkaW5nIGNhY2hlZCBjZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5v
dCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNjc3OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0g
ICAgICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAg
ICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAg
ICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAg
ICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZp
ZXIudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAg
ICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmll
ci5jZWxsKCkpOworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1
ZSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwg
T3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBz
dGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3Rh
Y2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgICAgICAgICAgICAgaWYgKENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlk
KCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dy
YXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
ZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5m
byhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlk
KSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsK
IAotICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBieVZh
bEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRp
Zmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5
T2Zmc2V0KQotICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBp
ZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNv
ZGUubV9wdXRLaW5kKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29t
cGlsZUFzUHV0QnlPZmZzZXQpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRl
TmFtZSwgT3BJbmZvKCksIE9wSW5mbyhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0
eSwgdmFsdWUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1l
KTsKQEAgLTY1NjcsMTIgKzY1NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29s
IGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAg
ICAgICAgICAgIFB1dEJ5U3RhdHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAog
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250
ZXh0U3RhY2ssCi0gICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5p
ZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50
Q29kZU9yaWdpbigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwg
Ynl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQo
YmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmll
ck51bWJlciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBi
eXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cHV0X2J5X2lkKTsKICAgICAgICAgfQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAg
aWYgKCFtX2dyYXBoLndhdGNoR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVy
TnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwog
Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAg
UHV0QnlTdGF0dXMgc3RhdHVzOwogICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHVpZCwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1
aWQpLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJ
ZFN0YXR1czo6VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1
dEJ5U3RhdHVzKFB1dEJ5U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0
dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAg
ICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAg
ICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5m
by5lY21hTW9kZSgpKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1
ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg4MTksNDUgKzg4MDgsMjcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5
dGVjb2RlSW5kZXggb3NyRXhpdEluZGUKICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5t
X3ZhbHVlKTsKICAgICBib29sIGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX3B1
dF9ieV92YWxfZGlyZWN0OwogICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxzZTsKLSAg
ICB7Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKTsKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICB7Ci0g
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50
Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5l
IEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAgIC8vIEF0IHRoYXQgdGlt
ZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAot
ICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAm
JiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRl
bnQpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUu
aGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5
SWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hl
ZElkOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZp
ZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07
Ci0gICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGZy
b3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICBpZiAo
IW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZElkZW50KQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENvbnN0YW50VmFsdWUpKSB7CisKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lu
bGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29k
ZU9yaWdpbigpKTsKIAorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAg
ICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHBy
b3BlcnR5KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCF1aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAg
ICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcElu
Zm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVQ
dXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMs
IGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAg
ICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNv
bXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIG9z
ckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb21w
aWxlZEFzUHV0QnlJZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAppbmRleCA5MTY0NzBkMTdkNTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3OTU4YjRhLi42ZjIwNGQy
YzVkZTBhNjEyZjczMWM5NTdiNDYxZGNmMzBjNGExMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtNTY5LDcgKzU2OSw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBj
YXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0g
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKaW5kZXggODZh
M2QwNzY2NGQ3ZmE5Mjc1MTI5OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNlOWZmMGViNWRhNTEwZWMy
MzQwNjQ2MmE3MWU4ODA5NTA5NjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBjbG9i
YmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAppbmRleCBlYWVhZjg1ZWEyNTQxNzI1NzU1ZjQ4Y2VmZGVk
ZTAzYjgxYzlmYTJhLi5iODgyNWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFkOTMyNGE0MGMxNjE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5j
bHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
UHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTAx
LDcgKzUwMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
ICAgICAgICAgICAgICAgICAKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmljRmlsdGVyKFsmXSAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJhc2VWYWx1ZS5jb250YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTUxMywxMSArNTEzLDkgQEAgY2xhc3Mg
Q29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2Uo
dmFyaWFudC5pZGVudGlmaWVyKCksIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQub2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEzLDcgKzEyMTEsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsK
ICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ss
IE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBl
bWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBB
YnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgp
OwpAQCAtMTIyNCw3ICsxMjIyLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwog
CiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBudWxscHRyOwotICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRy
YW5zaXRpb24oKSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSkpOwogICAgICAgICB9CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBjbGFzcyBDb25zdGFudEZv
bGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5
T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICAgICAgbm9kZS0+
b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIGlmIChkaWRBbGxv
Y2F0ZVN0b3JhZ2UpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgTnVrZVN0
cnVjdHVyZUFuZFNldEJ1dHRlcmZseSwKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAgY2xhc3MgQ29u
c3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBpZiAoIWJhc2VWYWx1
ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAg
ICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAg
ICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBu
b2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICBub2RlLT5jYWNo
ZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0
S2luZCk7CiAKICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKQEAgLTE0MjQsOCArMTQy
Miw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKIAogICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgVHJhbnNpdGlvblZl
Y3RvciB0cmFuc2l0aW9uczsKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgZm9yIChjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTQ0OCw3ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVj
dHVyZSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSB8fCBwcml2YXRlRmllbGRQdXRLaW5kLmlz
U2V0KCkpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFu
dC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJn
ZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwpAQCAt
MTQ2NCw4ICsxNDYyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBk
ZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KIAogICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgRmlsdGVyUHV0QnlJZFN0YXR1cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCisgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBGaWx0ZXJQdXRCeVN0YXR1cywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAogICAgICAgICAgICAgRWRnZShiYXNlTm9k
ZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKCkuZW5zdXJlKHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKaW5kZXggNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2MzN2UxOGYxZS4uZTY0ODE2
N2MxMTg2YmM4YzkzZjMyZThjNTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2Ug
RmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0ZTlhNWNmMmQ1NmM2NDgz
ZDIyYWJiYTY2NzJhYzczODUwOS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFjNTI0OTE1M2Y5ODZlMzk4
YTI2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBA
IC0yODY1LDcgKzI4NjUsNyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgY2FzZSBDUFVJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4
ZTMxNWRhNzM1ZGZlMGYzLi4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5v
ZGUtPmdldEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUt
Pmhhc1B1dEJ5SWRTdGF0dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0
QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c0VudW1lcmF0b3JNZXRhZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJh
dG9yTW9kZXMgPSAiLCBub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBp
ZiAobm9kZS0+aXNKdW1wKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNjYjNjNjku
LjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUyLDcgQEAg
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2Rl
bEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRz
LCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4zNjE3NDc3
ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNzIEpJVENv
bXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5k
KElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7
CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdlbmVyYXRv
ciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAgICBtX3B1
dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPihn
ZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0IEpJVERl
bEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQogICAgIHsK
ICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRH
ZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFzcyBKSVRD
b21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlz
OwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0b3I+LCA0
PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRH
ZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8
SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5l
Q2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwogICAgIFZl
Y3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5
VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVyYXRvcj4s
IDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmlu
ZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRhZTQ1MzUw
NGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBs
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIE51
a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1
czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4
IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIwMTJkY2E1
OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQu
aCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3Vs
YXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzkyLDcgQEAg
c3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRh
IHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRCeUlkVmFy
aWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFyaWFudHM7
CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFs
bG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRCeVN0YXR1
cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3RhdHVzOwor
ICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAgICAgCi0g
ICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMqIHB1dEJ5
U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkpOwotICAg
ICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAgIEFTU0VS
VChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5U3Rh
dHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFhMDJlNTY1
NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVmZDg5ZjY0
M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01NDYsNyAr
NTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZpbHRl
ckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyR2V0
QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5U3RhdHVz
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1cywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11
c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQxNmVhYmVi
YjllMjIyMzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2JlZGRmNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5l
Q28KIAogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlmIChjYWxs
SW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGluZXMgU2V0
dGVyQ2FsbCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRoaXMgb3Bf
cHV0X2J5X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9zc2libGUg
dGhhdCB3ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBjb25zaWRl
ciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJhc2VsaW5l
IENvZGVCbG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4gKEEpIGdl
dHMgREZHIChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVjdHMgZW5v
dWdoIGluZm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1cmVTdHVi
SW5mbyBmcm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxsLgotICAg
ICAgICAgICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNlIGl0IGlz
IG5vdCBleGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAgICAgICAg
Ly8gNS4gVGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28gKEEpIGlz
IGV4ZWN1dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9jayBhZ2Fp
bi4KLSAgICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0dGVtcHRz
IHRvIHNlYXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlkIChvcmln
aW5hbGx5LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChBKSdzIEpJ
VERhdGEgaXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29kZU9yaWdp
bihjYWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5
VmFsSW5mbyk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+ZG9uZVRh
cmdldC5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4oY2Fs
bEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsK
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJldGFnZ2Vk
PEpTRW50cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1
NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlk
NDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgs
NyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSAr
MjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJl
IGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkg
dHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBj
dXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5h
cHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRP
ZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJl
LmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFu
dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShj
dXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFu
dHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJy
ZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBo
LmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lu
a2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXgg
MTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkw
ZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0
NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGlj
IFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZpbHRlckNh
bGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUw
NDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5
OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wg
aWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCmluZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0ZTJkNmI1ZDk5
M2ViNmIuLjYwM2ZmN2IyZTUyZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3ZTFkMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZj
MTU3NDE1OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNh
c2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAg
ICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMw
ZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdi
YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEy
LDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5
NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1
czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5
ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00
MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAppbmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4
ZWY3MTAwLi5jMzlmMmRkZjM3NTM2MzFiMTUyODUxMWFiYzkwZTcxYTUwYTMwN2M3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcg
KzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAg
ICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50
ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlh
bnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlh
bnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVj
dHVyZSk7CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5z
aXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAg
UHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBM
VmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNl
dCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9v
dXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5k
KCkpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAg
ICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFn
cygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5
cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5k
ZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVj
YmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9z
dHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVk
ZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5j
bHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIK
KyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2lu
Y2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmlu
ZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEw
ZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8o
T3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAg
ICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNl
V2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5C
eUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFj
cm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAor
ICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVt
cCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTVi
NmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRl
eCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7
CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1f
ZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1f
Z2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0lu
ZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1f
cHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJU
KG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDY0NDBm
ZjI0MTBmMDM3MmQxYjVmYjdmMDU3N2ZkNzBmNDllMjA1NTguLjI2YWZmZGE1N2M0MDk1YjQ5MWFi
YjU0MWYyNjI3YjFiZjBhNjFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4
ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNv
ZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxP
cFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0
ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jayk7CkBAIC0yNjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7
CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlN
b2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBS
ZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIp
OwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJ
ZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApA
QCAtMzg0LDM2ICszNTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4
aW5nVHlwZSwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0gICAgICAg
IAotICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOwot
ICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVn
VDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2YWx1ZSB0
byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCi0g
ICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUg
aXMgYWxyZWFkeSBwcm9maWxlZC4KLSAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4K
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnQz
MlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMyU2hhcGUp
OwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1w
TGlzdCBlbWl0RG91YmxlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5m
bywgRG91YmxlU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChP
cCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBlIGluZGV4
aW5nU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJy
YXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRB
cnJheVR5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01B
TW9kZSBlY21hTW9kZShPcCk7CkBAIC0xMDY0LDYgKzEwMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAg
ICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlz
OwogICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAg
ICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVj
dG9yPEpJVEluQnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5C
eVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5l
cmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0xMDkxLDYgKzEwMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAg
dW5zaWduZWQgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVu
c2lnbmVkIG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9w
dXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRl
eCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9N
QVggfTsKICAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHAKaW5kZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uYTkw
Yzg2OWQzOTc5OTc2YzZmZmE2ZWRkMjNmYzMyNjM0NDJmNTlmMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0
Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAg
IEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdl
bmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NU
eXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAg
ICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBz
dHViSW5mb0dQUikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1f
cHV0S2luZChwdXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw2NyBAQCB2b2lkIEpJVEdldEJ5VmFs
R2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xv
d1BhdGgpCiAgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFs
R2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKKyAgICA6IEJhc2Uo
Y29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBl
LCB1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKKyAgICAsIG1fcHV0
S2luZChwdXRLaW5kKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQor
eworICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAg
bV9zdHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8t
PnJlZ3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5m
by0+dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiA9IHN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHVi
SW5mby0+YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVU
YWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BS
ID0gcHJvcGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
IHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1Yklu
Zm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5h
bGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAg
QmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZv
LT5zbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0aW9uX0dTc2lKSkMgSklU
UHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9w
dXRLaW5kKSB7CisgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgIGlmIChtX2Vj
bWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZToKKyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgIEFTU0VSVChtX2Vj
bWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNv
bXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0
VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgs
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJSZWcgc3R1YkluZm9HUFIp
CiAgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRl
eCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCBlZTY4MTQxMDFhODFl
YmQxNTViZjRkYjY5M2ZmNDdjOGEyNzhmN2ZiLi4zMDViNzBkM2Y5MmIxZmUzYjVhNjY3ZGIzMzQ0
YmI2NjdkNmZiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAgY2xhc3MgSklUR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogCiBj
bGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3Ig
ewogcHVibGljOgotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAgICAgICA6IG1fZWNtYU1v
ZGUoRUNNQU1vZGU6OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Io
KSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwK
QEAgLTE0MiwxMCArMTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93
UGF0aEZ1bmN0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAg
ICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CiAgICAgUHV0S2lu
ZCBtX3B1dEtpbmQ7CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcgQmFzZSA9IEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKCkgPSBk
ZWZhdWx0OworCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayos
IEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgc3R1YkluZm9HUFIs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRo
SnVtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAubV9qdW1w
LmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1wOworICAgIH0K
KworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5r
QnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CisKKyAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRo
RnVuY3Rpb24oKTsKKworcHJpdmF0ZToKKyAgICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1v
ZGU6OnN0cmljdCgpIH07CisgICAgUHV0S2luZCBtX3B1dEtpbmQ7CisKKyAgICBKU1ZhbHVlUmVn
cyBtX2Jhc2U7CisgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOworfTsKKwogY2xhc3MgSklURGVsQnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgKaW5kZXggNzc0NGI1MDgzN2FlYTdiYTA4NWEwMTM0NWZiYmYyYjY4YmYwZDQyNS4uNzdhZjVi
MTMzZjQ1ZmIxMWQ0MDViMzY5OTJiZTBjNzI4MDY0YTAzNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKQEAgLTM2NCwyNCArMzY0LDYgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmkKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NP
Zk91dE9mQm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJy
YXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJvZmlsZVNh
dyA9IFtdIChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KSB7
Ci0gICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJy
YXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2Rl
cyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChhcnJheVBy
b2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklURG91
YmxlOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCi0g
ICAgICAgIHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9k
ZXMsIEFycmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsK
LSAgICByZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4ZDc3NWJl
Y2M3MWY4MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRhOTcxOWEy
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAt
NzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywg
c3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNs
b3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQog
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEs
NyArNzUxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIs
NyArNzgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0
dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwg
KnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3
ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBl
LCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29k
ZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1
dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwg
aWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHVi
SW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUp
OwogICAgIH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lk
LCAoSgogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVy
ZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90
LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAg
ICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0
cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQs
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2
b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZh
bHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1v
ZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRl
eDsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBz
dGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91
bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFy
cmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dQogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4
KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsK
LSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+
c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVy
dHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0
IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNl
bGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkK
LSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNT
dHJpY3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5
LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNj
cmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFN
b2RlKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZh
bHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXli
ZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZh
bEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1h
eWJlSW5kZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkg
ewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwor
ICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBA
IC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCks
IHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVy
Ojppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNo
ZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRo
ID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6
OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0
eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0
aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9u
UmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFs
T3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFN
b2RlIGVjbWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8g
U2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVz
dWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVk
OwotCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAm
JiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQot
ICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2Fs
bEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFT
U0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJs
ZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1p
emUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9y
U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0
c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewot
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmlu
ZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3Ry
dWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBw
YXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQs
IHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1p
emF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChD
YWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0
LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9s
KCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nl
c3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUs
IGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXApOwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgo
cHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJ
bmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbElu
Zm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVk
SWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQ
dXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxp
a2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxv
Y2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBi
YXNlVmFsdWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNj
ZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21D
ZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQor
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5
S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlv
blJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25S
ZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3
ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVu
IG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4g
Rm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8v
IG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBm
b3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBw
b2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8v
IHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRo
Q291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRp
b25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxl
KiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3Vs
dCByZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7
Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbElu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5
VmFsSW5mbywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0
dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1p
emF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAg
ICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVz
dWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1
YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUg
c3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNl
VmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChi
YXNlVmFsdWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1
Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUp
KSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2Rl
KSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29w
eU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMy
KCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAg
ICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5
UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAq
c3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVj
dCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGls
IDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlv
blJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5p
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
KCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxl
SWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVy
Ojppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxP
YmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4
KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAg
ICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxP
cFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlr
ZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9j
aywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nl
c3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNt
YU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3Ry
dWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1Bh
dGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7
CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmll
ciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOwor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXph
dGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRp
b25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJ
ZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0
aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fp
bi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAg
IC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0
eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBi
ZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAg
IC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQ
YXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFs
dWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0
OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2Rl
IGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VW
YWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1
YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJl
c3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsK
LSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlD
KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwg
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJz
Y3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7
CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9k
ZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRpcmVjdFB1
dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNl
VmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xv
cHB5KCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01B
TW9kZSBlY21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisK
KyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
cHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1Yklu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsK
K30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAg
ICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNj
cmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2Jq
ZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJp
Y3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVj
dFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAyNTg0ZTk5
NWU0NjZkZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0YmU4M2Uw
NmJlMDYyNTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBF
Q01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJh
bWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNTY2OGRmYmU0MWQxMmE5
MjI0YTQzYzA4ODEzNGUzY2M1Yzg0Y2M3ZS4uMDBlNzY4NDc5ZDcwNTIxZTNlZTIzZWM0ZjU4YTYy
ZDA0NDRkNGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKQEAgLTQzOCwxNzcgKzQzOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21h
TW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZh
bD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9w
ZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KTsKLSAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUo
SW1tMzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNl
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICgh
cHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQz
MiA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFk
ZHJlc3MoJmJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7Ci0gICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEp
OwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFNlZSBjb21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRv
V29yZChyZWdUMSwgcmVnVDEpOwotICAgIH0KICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hv
dWxkIGRvIHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2Rl
ID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERv
dWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3Vv
dXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMyksIHJlZ1QyLCBlY21hTW9kZSwgcHV0S2luZCk7
CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoYmFkVHlw
ZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5
cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3Ag
Ynl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAo
YnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAgICAgICAgICBm
YXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRo
aXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0KLSAgICAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBK
dW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0KLSAgICBMYWJlbCBz
dG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDMpOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFw
ZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0g
ICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1w
IG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOwotICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0g
ICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3Rl
ciwgcmVnVDMpOwotICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAgICAgICByZWFk
eS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAg
IAotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAot
ICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAg
IAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKLSAgICBzdG9yZTMy
KHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAg
ICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVB
ZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRl
c3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3RvcmU2NChyZWdU
MywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAg
IGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lh
bENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1Qy
LCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBicmFuY2gz
MihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVuZC5saW5rKHRoaXMpOwot
ICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJ
WE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVs
eSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZp
bHRlckJhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2MSwxMiArNTE1LDE1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVD
TUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwog
CiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0
ZWNvZGUubV9lY21hTW9kZTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTY3NCwxNiArNTMxLDE0IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRC
eVZhbEluZGV4KytdOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8s
IFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMywg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtNjk0LDI4ICs1NDksMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9
IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1l
bnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZVBSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgYnlWYWxJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQogICAgIENhbGwgY2FsbDsKKyAgICBhdXRv
IG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplOworICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwogICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CisgICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0g
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJu
QWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC03MzYsMTggKzU4OSwxOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2Rl
R1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1
bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
NDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2Jh
bE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk+
KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5m
b0dQUiwgZWNtYU1vZGVHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsKICAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1l
bnRHUFI0LCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRy
VGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgZWxzZQogICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgwOSwxMyArNjYyLDEzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1
bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1
dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlW
YWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihwdXRLaW5kLnZh
bHVlKCkpLCBwdXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKQEAgLTg1MSwxNCArNzA0LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIg
PSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1l
bnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFBy
aXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFsT2Jq
ZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5mb0dQUiwgcHV0
S2luZEdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpAQCAtMzI5MCw4MiArMzE0
Myw2IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXN0ZXJJRCBjZWxs
LCBSZWdpc3RlcklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRzTGlua0ZvcldyaXRl
QmFycmllciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEpJ
VEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsK
LSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlU
eXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChpc0ludCh0eXBlKSkK
LSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMK
LSAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5
IG5ldmVyIGNvbWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5z
bG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5m
by0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZv
LT5kb25lVGFyZ2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAg
ICAgIEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxlZS5leGVj
dXRhYmxlQWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYXJDYWxscy5sYXN0KCku
ZnJvbSwgbV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGlu
ZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1f
Y29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAg
ICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIs
IEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWxf
ZGlyZWN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7
Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+
bV9iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3Mp
KSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0K
LS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRp
b24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBl
eHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci10ZW1wbGF0
ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRB
cnJheU1vZGUpOwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhD
YWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0zNDA3LDIyMyArMzE4NCw2
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQg
cHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJU
KChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bj
b2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdp
dGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNs
b3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmICghbV9leGNlcHRp
b25DaGVja3MuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNo
ZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgY2FsbFNpdGUgOiBtX25lYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVl
KQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5j
YWxsZWUpOwotICAgIH0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9mYXJDYWxs
cykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBnZW4u
ZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVyKTsKLQotICAgIGJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywg
cGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgcHV0
X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0KSA/ICJfZGlyZWN0IiA6
ICIiLCBwcm9wZXJ0eU5hbWUudWlkKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIGJ5VmFs
SW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9ub3RJ
bmRleEp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5m
by0+bV9zbG93T3BlcmF0aW9uID0gcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+
bV9ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihi
eVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNz
KSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJv
bSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdl
IGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10
ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1
dEJ5VmFsPihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIs
IFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2Rl
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVn
VDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklE
IGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdU
NDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBw
cm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0g
ICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNj
cmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1
dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAo
QWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUo
dHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKSk7Ci0j
ZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpKTsKLSNlbmRp
ZgotICAgIAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4g
Z2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhl
IGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VD
b25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxh
dGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7Ci0gICAg
ICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYp
KTsKLSAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVh
cmx5U2NyYXRjaCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAoKTsKLSAgICAgICAgdG9v
QmlnLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZmYpLCBlYXJseVNj
cmF0Y2gpOwotICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAgICAgIGluQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
LSAgICBjYXNlIDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRl
U2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
MjoKLSAgICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAg
ICAgc3RvcmUzMihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHks
IFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Ci0gICAg
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7
Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0
ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwot
ICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2Ny
YXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBS
ZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7
Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlT
Y3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAg
ICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1w
VGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlw
ZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZv
clR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlw
ZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAg
ICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihl
YXJseVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBS
ZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhp
cyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJseVNjcmF0Y2gp
KTsKLSAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKLSAgICBtb3Zl
NjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7
Ci0jZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsK
LSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKTsKLSAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIEp1bXAg
cmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRl
U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbmRpZgotICAgIAot
ICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3Zh
bCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8g
YmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25h
bGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNo
MiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0
eXBlKSkgewotICAgIGNhc2UgNDoKLSAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdU
MCwgZnBSZWdUMCk7Ci0gICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVT
Y3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
ODoKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBw
cm9wZXJ0eSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCBi
OThiZmVjZWRhYTU1NjAxZjk1YTg4YmVkYTYxYjA5ZjFhMzQzNDcxLi5mYmUxYTAzN2YyOWQyYzNm
OGRiM2FkYTkyMTljYWE1Zjg3MWI2M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ2NiwxNTAgKzQ2NiwyNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVj
bWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6
OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5k
OjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAorCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgCisgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1Q1LCByZWdUNCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2Us
IHJlZ1QxKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBh
ZGRTbG93Q2FzZShub3RJbmRleCk7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMSwgcHJvZmlsZSk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91
bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEpOwotICAgIAotICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAg
IGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5
dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJ
VERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJy
YXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAot
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4
LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAg
ICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29udGlndW91c1NoYXBlKSk7Ci0gICAg
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBj
YXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlMzIocmVnVDAs
IEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDMpOwotICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAg
ICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVn
VDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVn
VDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBS
ZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFs
Q2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhp
cyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2Fz
ZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbElu
Zm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcs
IGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Cisg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7IC8v
IHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8gdGFnCi0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAK
LSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUzMihy
ZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGVuZC5saW5rKHRo
aXMpOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
KyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUg
ZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTYxOSwxMiArNDk2LDE1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3Qo
KTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2Fk
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklUOjplY21hTW9kZShieXRl
Y29kZSk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02MzIsMjEgKzUxMiwyMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0gICAg
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwotICAgIAorCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CisKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1
Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgogICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBo
YXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CisgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1pdExv
YWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1
LCByZWdUNCksIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKIAot
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQ
YXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXgrKzsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAppbmRleCAzN2E4MGIyOTU3NzIxMGYzNWUwNmQ4MWJhMTM0NWY2OTc4MDA5NjQ0Li40YjcxYTBm
YTlmZDk5MDMxM2NhNGFiNzlkMTk0M2Y4YzgxZDdmMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKQEAgLTU2OCw1MyArNTY4LDk0IEBAIHZvaWQgcmVwYXRjaEFycmF5R2V0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTCiAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIGF1dG8gYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBw
dXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKK3N0YXRp
YyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1
dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1v
ZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0OworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6
IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNl
dDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGlj
IGF1dG8gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewot
ICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsK
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZh
bDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRL
aW5kKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTY4Miw4ICs3MjMsOCBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jawogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gs
IG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEJ5S2luZCwgcHV0S2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC04MTcsMTIg
Kzg1OCwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkQWRkQWNjZXNzQ2FzZSwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkp
OworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAKICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0
cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2Fz
ZSkpOwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwogCkBA
IC04MzUsMTIgKzg3NiwxMDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICByZXR1cm4g
cmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRl
cjsKIH0KIAotdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5
S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQor
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30K
Kworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCkKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
KworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlm
IChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlT
dG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDhDbGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50
MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJy
YXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmln
SW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2Ut
PmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlT
dG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUs
IG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsK
IH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5
U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2LDcgKzExMjEsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYm
ICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdl
bmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJbkJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5MSw1NSBAQCB2b2lkIHJl
c2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgR2V0QnlLaW5kIGtpbgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgcmVzZXRQdXRC
eShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRC
eUtpbmQga2luZCkKIHsKLSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5jdGlvblR5cGUgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUND
YWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAg
IEZ1bmN0aW9uVHlwZSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQot
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUp
Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6
ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJ
ZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1p
emVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2Fs
bFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rp
b25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAg
ICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJp
YyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgfQogCiAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRp
bWl6ZWRGdW5jdGlvbik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1
dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRC
eUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNj
ZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KIH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2MzczYzBhYzM2
MjlkOGU2Li5lY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBjbGFzcyBH
ZXRCeUtpbmQgewogICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3MgUHV0QnlL
aW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxCeUtpbmQg
ewogICAgIEJ5SWQsCiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFzcyBJbkJ5
S2luZCB7CiAKIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiB2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUs
IENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBD
b2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBy
ZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUg
YmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9k
ZSk7Cit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFs
dWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRj
aERlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90
JiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1
YkluZm8mLCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxP
YmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wg
d2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtp
bmQpOwogdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcihDYWxs
RnJhbWUqLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5m
byYpOwogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeUlEKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCByZXNldERlbEJ5KENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZvaWQgcmVzZXRJbkJ5KENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXNldEhhc1By
aXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKaW5kZXggN2VlYTc1
ODcwZTdiMTUyOTY5MTBkNWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2IwNzkxNGVlZDdmNjc3Nzk5
MDFmYmJhMzA2YmM0NzEyYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogLy8gVGhlIGZvbGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBmb3IgdGhlIG9wY29kZSBu
YW1lcy4gVGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBH
ZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8gYmVjYXVzZSB0aGVyZSBp
cyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlTdGF0dXMuY3BwKQogLy8g
d2hpY2ggcmVmZXJzIHRvIHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZWZpeGVk
IHdpdGggImxsaW50XyIuCiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50YXRpb24sIHRoZSAyIGFy
ZSBlcXVpdmFsZW50LiBIZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFsaWFzIGhlcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436154</attachid>
            <date>2021-08-23 00:14:02 -0700</date>
            <delta_ts>2021-08-23 01:04:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823001401.patch</filename>
            <type>text/plain</type>
            <size>296794</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iZmEwMTg1YTI5OGI2ZTgw
NzViYWZmNzgwNmI5YzNiNWEwZmE3Njc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5r
VG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJz
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojpv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJp
YW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQ
dXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFu
dDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlND
OjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwp
OgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAg
KiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZh
bCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVy
YXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZh
bEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmNob29zZUFycmF5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAo
SlNDOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUpOgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjphcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNo
ZVB1dEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEFycmF5UHV0QnlWYWwp
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6cmVwYXRjaFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQp
OiBEZWxldGVkLgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oOgorCiAyMDIxLTA4LTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIGFscmVhZHktc2hpcHBlZCB3YXNt
IG9wdGlvbiBmbGFncwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGQ2Y2I0MzIy
OTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4zMjNkOGE0MGUxZjZlMjNmY2UyN2VkN2Mw
OGRiNTMyNDczYjI2YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDY0LDkg
KzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVF
MUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYg
LyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkEw
MTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5
QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhB
M0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBU
cmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjMw
M0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyog
Q2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjg2NiwxMSArMjg2NiwxMSBAQAogCQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYz
QzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTUx
NENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRC
eUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlh
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0
QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0UmFjZUtl
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0
ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04Njk1LDEwICs4Njk1LDEwIEBACiAJCQkJMEZEM0U0MDgxQjYxOEI2
NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYxNUNEMjAxQkE1Rjk4
NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNEMjExQkE1Rjk4NjAw
MzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0
dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNw
cCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8s
CiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKIAkJCQkwRjQ0
QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAgKi8sCiAJCQkJMEY0
NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAqLywKQEAgLTEwNTA2
LDggKzEwNTA2LDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZv
a2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJl
TmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0
QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzJBNDE0
Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTNC
NEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNjQ3MDJk
YjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUzMTE3NmY2Mzg1ZWJl
MzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNjks
OCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5dGVjb2RlL1Byb3Bl
cnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKIGJ5dGVj
b2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCi1ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAorYnl0ZWNvZGUv
UHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2Rl
L1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKaW5kZXgg
ZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uNzYyOGNiMzBlMWRmZTNi
MzAyMzNjZWY5MGI3ZGM3ZjhkY2U2MjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVmPEFjY2Vzc0Nhc2U+
IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlw
ZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29uc3QKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRl
eGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFt
cGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250
aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9vbCBBY2Nlc3NDYXNl
OjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEluZGV4ZWRE
b3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVu
dENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTY5LDYgKzY0
NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZlY3RvcjxKU0NlbGwq
PiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBs
YWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6
CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CiAKICAgICBj
YXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0Vt
cHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VS
ZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpAQCAtMTIyNywxNiAr
MTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAg
ICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNo
R1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3Jh
dGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJ
ZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3Jh
dGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzYz
LDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
ICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAg
ICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNo
RlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJs
ZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGlt
ZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0Vt
cHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
I2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBK
U1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlz
RW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAg
ICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4NywyNjkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQo
KTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAg
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVt
cHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNl
IEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNv
ZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBi
YXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUu
dS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3Jw
aGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldy
aXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5k
ZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9j
YXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9Owor
CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmICht
X3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisg
ICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxI
ZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vs
c2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKworICAgICAgICAgICAgc3RvcmVS
ZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVn
cywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50
MzJTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToK
KyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBz
dG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsK
KyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7
CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkg
PSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4o
c3RhdGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQ
UigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChw
cm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBl
bWl0dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0
LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBp
ZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgewogICAgICAgICAgICAgaXNP
dXRPZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAgICAgICAgICAgIC8vIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5z
dWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQ
cm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFs
Q2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZh
aWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFz
ZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlw
ZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0
ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAg
ICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1
ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElmTm90
SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIGF1
dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZqaXQp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAg
ICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJs
ZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwg
dmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgLy8gT3V0T2ZCb3Vu
ZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0
aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOworCisg
ICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJl
Z2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOwor
ICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkKKyAgICAgICAgICAgIHNjcmF0Y2gzR1BSID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25k
aXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsK
KyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFKU0M6
OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgc2NyYXRjaDNHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRv
b0JpZyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuLCBzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGpp
dC54b3IzMihzY3JhdGNoM0dQUiwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8g
Y2xhbXBlZCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgdG9vQmlnLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhm
ZiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgaW5Cb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU4KHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMTYodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNUd28pKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Zv
dXIpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChpc091dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGlzRW1wdHkpOworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBS
UmVnKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3Rh
dGUuc2NyYXRjaEZQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlRmxvYXQoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMjE4Myw2ICsyNTM3LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVj
a1ByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgLy8gVGhlc2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNp
bmNlIHRoZSBndWFyZCBpcyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNh
biBiZSBzdXJlIHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0
aGVzZSBzaW5jZSB0aGV5CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUg
Y2hlY2tzLgpAQCAtMjE5NiwyMiArMjU2MywzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNl
Ojp0b1R5cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBl
ZDsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAg
ICAgICAgIHJldHVybiBUeXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAg
ICByZXR1cm4gVHlwZUZsb2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJl
dHVybiBUeXBlRmxvYXQ2NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjI4NCw2ICsyNjYwLDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2Fu
QmVTaGFyZWQoY29uc3QgQWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRT
dHJpbmdMb2FkOgogICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXgg
NDE5Yzk5YzkwZjQzOTAxODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uMTg2NDRhZDUxMGY4MGJi
ZDk3NTFmODM2NjcwZmY5MGE5MzEwODQzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIElu
ZGV4ZWRTdHJpbmdMb2FkCisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRl
eGVkSW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRl
eGVkQ29udGlndW91c1N0b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0
b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0U3RvcmUsCiAgICAgfTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdh
ZDBkZjg4MjExMDdmZTNiODQ5MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcy
YjRkYzJhMWQxODkyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lDU3RhdHVzTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3Rh
dHVzTWFwLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBHZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQ
dXRCeUlkU3RhdHVzOworY2xhc3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4
LDcgQEAgc3RydWN0IElDU3RhdHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7
IG51bGxwdHIgfTsKICAgICBHZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAg
IEluQnlTdGF0dXMqIGluU3RhdHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1
dFN0YXR1cyB7IG51bGxwdHIgfTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0
ciB9OwogICAgIERlbGV0ZUJ5U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAppbmRleCA4MTA0YTJmMzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40
NzEzNTE5ZGJhOTRiMjE0ZmNlNDU3MTBkNzZiMjEyM2FmZDcwYjcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTEw
MjIsNiArMTAyMiw0NSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNj
ZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFN0
cmluZ0xvYWQ6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFN0cmluZ0xvYWQiKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQo
IkluZGV4ZWREb3VibGVTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRD
b250aWd1b3VzU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlw
ZWRBcnJheUludDhTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgICAgIG91dC5w
cmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRB
cnJheUZsb2F0MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDVhZmFiOWQzOWM3YTRlYTZlNjFjZjU2NDhhZWZhYzkwYzFmN2MyZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCi0KLSNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb21wbGV4R2V0U3RhdHVzLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5o
IgotI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50KQotewotICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50
cywgdmFyaWFudCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6c2hyaW5rVG9GaXQoKQotewot
ICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZN
JiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9
IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
OwotCi0gICAgLy8gV2UgYXJlIG5vdCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFu
eSBwbGFjZSBmb3IgYHB1dF9wcml2YXRlX25hbWVgLgotICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9y
dCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2Ug
aGF2ZQotICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4K
LSAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Ci0KLSAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7Ci0gICAgaWYg
KCFzdHJ1Y3R1cmVJRCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
bik7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwotCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJl
SUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwotICAgIGlmICghbmV3U3RydWN0dXJlSUQp
IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0g
ICAgfQotCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0
KCkpKSB7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAg
dm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIG9mZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNT
dGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
IGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2Nr
KTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVp
ZCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGRpZEV4aXQpCi0gICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1Yklu
Zm87Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAg
ICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0
YSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHBy
b2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLSNlbHNlIC8vIEVOQUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRpZEV4aXQpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsK
LSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLCB1aWQsCi0gICAg
ICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNp
dGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkg
PSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5m
byk7Ci0gICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKHN1bW1hcnkpOwotICAgIAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSgpKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7Ci0gICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlz
dCA9IHN0dWJJbmZvLT51LnN0dWI7Ci0gICAgICAgIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHJl
c3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAg
aWYgKGFjY2Vzcy52aWFQcm94eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy51
c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKLSAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3
U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVy
ZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxl
eEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBh
Y2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29t
cGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJs
ZTogewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IGNhbGxMaW5rU3RhdHVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5r
SW5mbygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
ZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2Fs
bExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXN1
bHQuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAg
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgIH0KLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2Vs
aW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgRXhp
dEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNv
ZGVJbmRleCk7Ci0KLSAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRT
dGFjaykgewotICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdp
bik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeUlkU3Rh
dHVzJiByZXN1bHQpIC0+IFB1dEJ5SWRTdGF0dXMgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVz
IGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgYmFzZWxp
bmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVS
ZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0
RnJvbUlubGluZWQpKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24o
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHJl
c3VsdDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIHVpZCwg
Y2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0
LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQotICAgICAgICAgICAg
cmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVp
ZCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwg
UHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQotewotICAgIGlmIChwYXJz
ZUluZGV4KCp1aWQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLQotICAgIGlmIChzZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cygpOwotICAgIAotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBQdXRCeUlk
U3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVj
dHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKLSAgICAgICAgICAgIC8v
IHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3Vj
aCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCi0gICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhy
b3cgZXhjZXB0aW9uLgotICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZp
bmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3JPclZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0
dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5w
cm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOwotICAgICAgICAgICAgaWYg
KCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlz
IHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgotICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVh
bnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhp
bmcgZmlzaHkgaXMKLSAgICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90
IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50Ci0g
ICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8g
dGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KLSAgICAgICAgICAgICAgICAv
LyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgotICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0KLSAgICAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQ
cml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0Ci0gICAgICAgIC8vIHNob3VsZCBuZXZl
ciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCi0g
ICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVs
ZC4gV2UgbmVlZCB0byB0YWtlCi0gICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRp
b24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgotICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0
S2luZC5pc1NldCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0KLSAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBh
IHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgICAg
IC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgotICAgIAotICAgICAg
ICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgotICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUg
Y29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUg
dXAsIHNpbmNlCi0gICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRp
ZXMgdG8gc3RyaW5ncy4KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwot
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQ
dXRLaW5kLmlzTm9uZSgpKTsKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAg
ICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gV2Ugb25seSBv
cHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRp
b24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQotICAgICAg
ICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOwotICAgICAgICBpZiAoIXRy
YW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgICAg
IGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5z
aXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7Ci0gICAgICAgIGlmICghZGlkQXBwZW5kKQot
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQot
ICAgIAotICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0j
ZW5kaWYKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAg
ICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1f
dmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRl
bXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOwotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBmb3Ig
KFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewotICAgICAgICBpZiAoIXZh
cmlhbnQuZmluYWxpemUodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjptZXJnZShjb25zdCBQdXRC
eUlkU3RhdHVzJiBvdGhlcikKLXsKLSAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0
aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkg
ewotICAgICAgICAqdGhpcyA9IFB1dEJ5SWRTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5t
YWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotICAgIH07Ci0gICAg
Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAg
ICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2lt
cGxlOgotICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghYXBw
ZW5kVmFyaWFudChvdGhlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwot
ICAgICAgICB9Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAg
ICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKLXsKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7Ci0gICAg
Zm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlh
bnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKG1fdmFyaWFu
dHMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLX0KLQotdm9p
ZCBQdXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICBvdXQucHJp
bnQoIihOb0luZm9ybWF0aW9uKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgU2ltcGxlOgotICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwg
IikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6
Ci0gICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4NzhlMjUyZGI2OWFjNTcxM2RjOGU4ZjhiNjQ0MDAwY2FlNjMwYjFmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJFeGl0
RmxhZy5oIgotI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUZpZWxk
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0jaW5jbHVkZSAiU3R1Yklu
Zm9TdW1tYXJ5LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFz
cyBWTTsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlOwotY2xhc3MgU3Ry
dWN0dXJlQ2hhaW47Ci1jbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotdHlwZWRlZiBIYXNoTWFw
PENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aD4gU3R1YkluZm9NYXA7Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0dXMgZmluYWwgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICAv
LyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgIE5vSW5m
b3JtYXRpb24sCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNv
bWUga2luZC4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVu
IHRha2Ugc2xvdyBwYXRoLgotICAgICAgICBUYWtlc1Nsb3dQYXRoLAotICAgICAgICAvLyBJdCdz
IGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgotICAgICAgICBNYWtlc0NhbGxz
Ci0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKCkKLSAgICAgICAgOiBtX3N0YXRlKE5v
SW5mb3JtYXRpb24pCi0gICAgewotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3Rh
dHVzKFN0YXRlIHN0YXRlKQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93
UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNp
dCBQdXRCeUlkU3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChzdW1tYXJ5KSB7Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9y
bWF0aW9uOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAg
IGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFr
ZXNTbG93UGF0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9
IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1
cyhjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLSAgICAgICAgOiBtX3N0YXRlKFNpbXBs
ZSkKLSAgICB7Ci0gICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3Rh
dHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcs
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVz
IGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKLSAg
ICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxp
bmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYg
Y29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLQotI2lm
IEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZv
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSNl
bmRpZgotICAgIAotICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQot
ICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3Jt
YXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IFNpbXBsZTsgfQotICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAg
ICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICBQdXRCeUlkU3RhdHVzIHNsb3dWZXJzaW9u
KCkgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+
JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KLSAgICBjb25zdCBQdXRC
eUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2lu
ZGV4XTsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwotICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwotICAg
IAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwotICAgIAotICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSklU
KQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAg
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8q
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNp
dGVEYXRhKTsKLSNlbmRpZgotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0g
ICAgCi0gICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NGQ2NDc4MmE5NjQzOTMwOWFlOWEx
ZmEwNDhhMzg3MjU1MjFmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUHV0QnlJZFZhcmlhbnQuaCIKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5j
bHVkZSAiSGVhcElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRWYXJpYW50
OjpQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgOiBQdXRC
eUlkVmFyaWFudCgpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotUHV0QnlJZFZhcmlhbnQm
IFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQot
ewotICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKLSAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVy
Lm1fb2xkU3RydWN0dXJlOwotICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1
cmU7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKLSAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwotICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQot
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAg
ICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAg
IHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IG9sZFN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7
Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFu
dCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzKQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICBy
ZXN1bHQubV9raW5kID0gU2V0dGVyOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RG
TW92ZShjYWxsTGlua1N0YXR1cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RydWN0dXJl
KiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Ci17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgIFJFTEVBU0VfQVNT
RVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9p
ZCBQdXRCeUlkVmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKLXsK
LSAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1
cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICBtX2tpbmQgPSBSZXBsYWNlOwotICAg
IG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1
dEJ5SWRWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAotewotICAgIHN3aXRjaCAo
a2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1i
b29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4ga2lu
ZCgpID09IFNldHRlcjsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIGlmIChtX29mZnNldCAhPSBvdGhl
ci5tX29mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2tpbmQp
IHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOiB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgbmV3VmFy
aWFudCA9IG90aGVyOwotICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VU
cmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBu
ZXdWYXJpYW50OwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgICAgICByZXR1cm4gYXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIpOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9
IG90aGVyLm1fb2xkU3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3
U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0
OwotICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90
aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0
dGVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgewotICAgICAgICAgICAg
aWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIW1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0
ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAg
ICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRp
dGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRp
dGlvblNldDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwot
ICAgICAgICAKLSAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1
cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQdXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHJlcGxhY2UpCi17Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsK
LSAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7Ci0gICAgQVNTRVJUKG1fb2Zm
c2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwotICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1
Y3R1cmVzKCkpOwotICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Ci0g
ICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAKLSAgICAv
LyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBh
bG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKLSAgICAvLyB0cmFuc2l0aW9ucyB0
byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1
cmUgUy4gVGhpcyBkb2Vzbid0Ci0gICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUg
YW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KLSAgICAKLSAg
ICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX29sZFN0cnVjdHVy
ZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwotICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojpm
aW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUo
dm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2
bS5oZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5m
aW5hbGl6ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewot
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFu
dDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAg
ICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBj
YXNlIFJlcGxhY2U6Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTog
IiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0
KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUcmFu
c2l0aW9uOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFRyYW5zaXRpb246ICIs
IGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKLSAgICAgICAgICAg
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0g
ICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8U2V0dGVy
OiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAg
IGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdIik7Ci0gICAgICAgIG91dC5w
cmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Ci0gICAgICAgIG91dC5wcmludCgiLCBjYWxs
ID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICBvdXQucHJpbnQoIj4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTc1YTczYTJmOGQ0YjVlNWYwYTFkZTQwOGE1ZmJiZDFjYjdhYjI1OS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1
ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua1N0YXR1czsKLQotY2xhc3MgUHV0QnlJZFZhcmlh
bnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gS2lu
ZCB7Ci0gICAgICAgIE5vdFNldCwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgVHJhbnNpdGlv
biwKLSAgICAgICAgU2V0dGVyCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudCgpCi0g
ICAgICAgIDogbV9raW5kKE5vdFNldCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0
KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIFB1dEJ5SWRW
YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLQotICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKLSAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsK
LSAgICAKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRT
dHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0
aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBs
YWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7
Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBU
cmFuc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgYm9v
bCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2Uo
KSBjb25zdDsKLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNp
Y3MgZm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQg
dGhpcyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNv
bnN0IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3Ig
dGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAg
IH0KLSAgICAKLSAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9j
YWxsTGlua1N0YXR1cy5nZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIGF0dGVtcHRUb01lcmdlKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShW
TSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLSAgICBi
b29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJl
cGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpOwotICAgIAotICAgIEtpbmQgbV9r
aW5kOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIFN0cnVjdHVyZVNldCBtX29s
ZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9Owot
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0
YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZiY2NhNjdjZjE4NmM0NmJkYTAzMzA2YmEwNDNjMDQwZmE3
Y2EwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgor
I2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIFB1dEJ5U3RhdHVzOjphcHBlbmRWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNT
dGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCit2b2lkIFB1dEJ5U3RhdHVz
OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBWTSYgdm0gPSBw
cm9maWxlZEJsb2NrLT52bSgpOworICAgIAorICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxl
ZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKworICAg
IHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIC8vIFdlIGRvIG5v
IGhhdmUgYSBjb2RlIHJldHJpZXZpbmcgTExJbnQgaW5mb3JtYXRpb24gZm9yIGBvcF9wdXRfcHJp
dmF0ZV9uYW1lYC4KKyAgICAgICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlz
IGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCisgICAgICAgIC8v
IElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KKyAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IH0KKworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllciA9ICYocHJvZmlsZWRCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IGlkZW50aWZpZXItPmltcGwoKTsKKworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0
YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIXN0cnVjdHVyZUlEKQorICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwor
CisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOworICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBs
YWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1
cmVJRCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7CisgICAgICAgIGNvbmRpdGlv
blNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihudWxscHRy
LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworfQorCisj
aWYgRU5BQkxFKEpJVCkKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
IGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9m
aWxlZEJsb2NrLT5tX2xvY2spOworICAgIAorICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2Nr
KTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgaWYgKGRpZEV4aXQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvOworICAgIFB1dEJ5U3RhdHVzIHJlc3Vs
dCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBz
dHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAg
IAorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIFVOVVNFRF9Q
QVJBTShtYXApOworICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FsbEV4aXRTaXRlRGF0YSk7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OworI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVC
bG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCit7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAg
ICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywKKyAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFy
eSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJ
bmZvKTsKKyAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKHN1bW1hcnkpOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSgpKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0K
KyAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIp
LCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5
bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAg
ICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAg
ICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpSZXBsYWNlOiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBh
Y2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAg
ICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmll
cigpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAg
IGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRlbnRpZmll
cigpLCBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVy
OiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0
dXJlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1
cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1
cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1
czo6SW5saW5lYWJsZTogeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
a2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
PigpLmNhbGxMaW5rSW5mbygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtT
dGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0
ZURhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nl
c3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAg
IGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0
LnNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0
ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwg
SUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQoreworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRl
RGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRT
aXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJQ1N0YXR1c0Nv
bnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0dXMgc3RhdHVz
ID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBibGVz
cyA9IFsmXSAoY29uc3QgUHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0dXMgeworICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKKyAgICAgICAg
ICAgICAgICBQdXRCeVN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCisgICAgICAg
ICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBk
aWRFeGl0LAorICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAg
ICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybiBiYXNlbGluZVJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRF
eGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC5zbG93VmVyc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAgICAgICAgIFB1
dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1
YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKKyAgICAg
ICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQorICAgIAorICAg
IHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUlu
ZGV4LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgYm9vbCBpc0Rp
cmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQoreworICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlmIChwYXJzZUlu
ZGV4KCp1aWQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisK
KyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKCk7Cisg
ICAgCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFB1dEJ5U3RhdHVzIHJl
c3VsdDsKKyAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc2V0W2ldOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5v
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRy
aWJ1dGVzKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAg
ICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0
UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQorICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVh
bnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5l
ZWQgdG8gdGFrZSAKKyAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24u
CisgICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKwor
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29y
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdh
dGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRX
YXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVw
bGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMg
ZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hw
b2ludCBzZXQuCisgICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBw
cm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAg
ICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhl
IHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBK
SVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8g
aGF2ZSBhIGxhenkgdGhpbmd5LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUg
dGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQ
dXRCeVZhcmlhbnQgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBz
dHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ug
Y2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBp
dAorICAgICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBi
ZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBu
b3QgaW5zdGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBz
bG93IHBhdGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAg
ICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNp
cyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQg
dGhpcyBpcyByZWFsbHkKKyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0
eSBjaGVja3MuCisgICAgCisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBv
biBkaWN0aW9uYXJpZXMuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAg
IC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3Qg
YW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQg
dG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBB
U1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwor
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgfQorICAgIAorICAg
ICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUg
dGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCisgICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7
CisgICAgICAgIGlmICghdHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CisgICAgCisgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0
QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgaWYgKCFkaWRBcHBlbmQpCisgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAg
IHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwor
Ym9vbCBQdXRCeVN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUg
PT0gTWFrZXNDYWxscykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG1fc3Rh
dGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFu
dHNbaV0ubWFrZXNDYWxscygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBmYWxzZTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OnNsb3dW
ZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8g
TWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1
dEJ5U3RhdHVzOjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xl
SWRlbnRpZmllckZvcklDU3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KQorICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJp
YW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5
U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpm
aW5hbGl6ZShWTSYgdm0pCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zh
cmlhbnRzKSB7CisgICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5
U3RhdHVzOjptZXJnZShjb25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVy
Lm1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1
dG8gbWVyZ2VTbG93ID0gWyZdICgpIHsKKyAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93
UGF0aCk7CisgICAgfTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
SW5mb3JtYXRpb246CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNp
bXBsZSkKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAg
ICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1lcmdlU2xvdygpOworICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2Ug
TWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2lt
cGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3Zhcmlh
bnRzLCBzZXQpOworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
KyAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAg
ICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0
aW9uOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAg
ICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcCht
X3ZhcmlhbnRzKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRh
a2VzU2xvd1BhdGg6CisgICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiKE1h
a2VzQ2FsbHMpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyYTFj
NzNjOGY0MWNhMTkyZTU4ZDRiZTFkZTE2NjEzZDkwMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4
aXRGbGFnLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmll
bGRQdXRLaW5kLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1Yklu
Zm9TdW1tYXJ5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBWTTsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3Ry
dWN0dXJlQ2hhaW47CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFw
PENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aD4gU3R1YkluZm9NYXA7CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8g
SXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9y
bWF0aW9uLAorICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21l
IGtpbmQuCisgICAgICAgIFNpbXBsZSwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0
YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBr
bm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscwor
ICAgIH07CisgICAgCisgICAgUHV0QnlTdGF0dXMoKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZv
cm1hdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0
YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8
fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRC
eVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
c3VtbWFyeSkgeworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoK
KyAgICAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgorICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1Bh
dGg7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpU
YWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0Nh
bGxzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIFB1dEJ5U3RhdHVzKGNvbnN0IFB1
dEJ5VmFyaWFudCYgdmFyaWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAgICB7Cisg
ICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBz
dGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVj
dHVyZVNldCYsIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVs
ZFB1dEtpbmQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0Nv
bnRleHRTdGFjayYsIENvZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMg
UHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2lu
KTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5v
SW5mb3JtYXRpb247IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7
IH0KKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICBQdXRCeVN0YXR1cyBzbG93VmVy
c2lvbigpIGNvbnN0OworICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwg
MT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1
dEJ5VmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2lu
ZGV4XTsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2lu
Z2xlSWRlbnRpZmllcigpIGNvbnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRv
ciYpOworICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0
IFB1dEJ5U3RhdHVzJik7CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JT
dHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRl
eCk7CisgICAgCisgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOwor
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZl
Y3RvcjxQdXRCeVZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjA3YzUzNWIzNzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuY3BwCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5
VmFyaWFudC5oIgorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZh
cmlhbnQmIG90aGVyKQorICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sK
KyAgICAqdGhpcyA9IG90aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIu
bV9raW5kOworICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAg
bV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNl
dCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7
CisgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7
CisgICAgZWxzZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lk
ZW50aWZpZXIgPSBvdGhlci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQ
dXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOwor
ICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFy
aWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRy
YW5zaXRpb247CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAg
IHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25k
aXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRl
cihDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZp
ZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5r
U3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworU3RydWN0dXJlKiBQdXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBj
b25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUg
IT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nh
cnkoKQoreworICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxh
Y2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZh
cmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBQdXRCeVZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBr
aW5kKCkgPT0gU2V0dGVyOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0g
ISFvdGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICht
X2lkZW50aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBOb3RTZXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAg
ICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQo
b3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRy
YW5zaXRpb246IHsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7
CisgICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZSgqdGhpcykpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFu
c2l0aW9uOiB7CisgICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRT
dHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdl
ZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRp
b25TZXQpOworICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBTZXR0ZXI6IHsKKyAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1
cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxM
aW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlv
blNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICgh
bWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAg
ICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNl
KQoreworICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxh
Y2UubV9raW5kID09IFJlcGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1f
b2Zmc2V0KTsKKyAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBB
U1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNl
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1l
cmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRk
IGEgbmV3IGZpZWxkIHdoaWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hp
bGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24n
dAorICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRo
ZSByZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVz
U3RvcmFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2Uu
bV9vbGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1
Y3R1cmUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1f
bmV3U3RydWN0dXJlKQorICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sK
KyAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9u
ZXdTdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlv
blNldC5hcmVTdGlsbExpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCI8Iik7CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJl
bXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAg
IG91dC5wcmludCgKKyAgICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29u
dGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250
ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAi
LCAiLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgor
ICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRp
dGlvblNldCwgY29udGV4dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAi
LCBtX29mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOworICAgICAgICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5VmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5r
U3RhdHVzOworCitjbGFzcyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAg
UmVwbGFjZSwKKyAgICAgICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAg
ICAKKyAgICBQdXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAg
ICAgICA6IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkK
KyAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmll
cihXVEZNb3ZlKGlkZW50aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5VmFyaWFudCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsK
KyAgICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRp
ZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0
KTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAg
ICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29s
ZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1
Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
IHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1
cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUo
KTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNl
IHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFu
c2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3
cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3Mg
Zm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhp
cyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0
IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVt
cGxhdGVkIGhlbHBlcnMuCisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0K
KyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxs
TGlua1N0YXR1cy5nZXQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRv
ciYpOworICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIg
IT0gISFvdGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKG1faWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBv
dGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1
cmVTZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFu
c2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAg
ICBLaW5kIG1fa2luZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1
cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51
bGxwdHIgfTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Cisg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAppbmRleCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3
Li5mY2UwZjRkOGVlMTBlZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02
MiwxMCArNjIsMTAgQEAgR2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0
OwogfQogICAgIAotUHV0QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0
YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBz
dGF0dXMpCitQdXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsK
LSAgICBhdXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsK
LSAgICBQdXRCeUlkU3RhdHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBz
dGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3Rh
dHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoY29kZU9yaWdpbiwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTEwNyw2ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdn
cmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdl
dHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBm
b3IgKGF1dG8mIHBhaXIgOiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVs
ZXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCmluZGV4IGJkMTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0
OTgzZGJjNzY3ZDA3ZTI4MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgIkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJJbkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRT
dGF0dXNlcyB7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVz
KiBhZGRHZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsK
LSAgICBQdXRCeUlkU3RhdHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBj
b25zdCBQdXRCeUlkU3RhdHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFk
ZEluQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBE
ZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVC
cmFuZFN0YXR1cyYpOwpAQCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7
CiAgICAgCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpw
YWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0
dXM+Pj4gcHV0czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxJbkJ5U3RhdHVzPj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzPj4+IGNoZWNrUHJpdmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZj
ZWIyM2RjM2NjMjFkMzI3ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRm
NzgxOWQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpyZXNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVC
bG9jayogYwogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJl
c2V0R2V0QnkoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5
SUQoY29kZUJsb2NrLCAqdGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0
UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJs
b2NrLCAqdGhpcywgSW5CeUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEy
OGU2ZTI1MDFhYWIxOGU1NWQ0MWE0Li5lMjI1NDBjMDliYzc4M2U3ZDhlMDZkNTNiN2NhODA4NzFl
ZTY3MjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaApAQCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBp
bnQ4X3QgewogICAgIEdldEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZh
bCwKLSAgICBQdXQsCisgICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAg
ICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCBk
MWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMxN2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0
NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC00Nyw3ICs0
Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNYXRo
Q29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBP
YmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJT
dHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAgICAgICAg
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwor
ICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRC
eU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAg
aWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2lu
YWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJl
KCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFw
cGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVhbGx5IGEgcmVwbGFjZS4KICAgICAgICAg
ICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmlu
ZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wg
aXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQ
dXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBhdXRvIHByaXZhdGVGaWVsZFB1dEtpbmQg
PSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1
dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKTsKLSAgICAgICAgICAgIFB1dEJ5
SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAg
IFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAg
ICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAgICAgIGlzRGly
ZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0g
dHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAg
ICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaENvbmRp
dGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9
IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1
Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJl
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9p
ZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOiB7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQotICAgICAgICAgICAgbm9kZS0+
cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQo
KSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1
Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQyMGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTcz
Yi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUzODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUs
NyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRC
dXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA2M2U2OGQwMzdmZTExMTAxYWU0
MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi43ZjQwMmU2OTdmOWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRm
MjIzNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
Ci0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAi
UHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgog
I2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNp
bmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgYm9v
bCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgY2hlY2tQcmVz
ZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgLy8gV29ya3Mgd2l0aCBib3Ro
IEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAg
IC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQ
dXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CiAgICAgTm9k
ZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiwgTm9kZSogdmFsdWUp
OworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0
IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0yNTMsMTMg
KzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2
YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5
SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVl
LCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKKyAgICAg
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQ
dXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKICAgICB2b2lkIGhhbmRsZVB1
dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKKyAg
ICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwKICAgICAgICAgYm9vbCBp
c0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlKTsKIAogICAgIHZv
aWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29u
c3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAgICAgICBOb2RlKiBi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2Rl
KiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAg
IHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0
aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUpOwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2Ug
bm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4g
dGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24gdGhlIHByb3RvdHlwZSAoaXQgd291
bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlvdXNseSByYXJlIGlmIHRoZXkgZGlkbid0
KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVjdHVyZVNldCgpIGhhdmluZwotICAg
ICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJl
IHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsu
CisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdh
eXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdv
cmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFu
IE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZlciwgdGhpcyB3aWxsCiAgICAgICAgICAg
ICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEg
aHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCi1Ob2RlKiBC
eXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgIFJFTEVBU0VfQVNT
RVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVj
a1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
cl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwogICAgIHJldHVybiBo
YW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1
ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
QnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlCiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAotICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUs
IGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5
SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFs
dWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFwaChwdXRCeUlkU3RhdHVzLm1ha2VzQ2Fs
bHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVz
Lm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVy
KSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNv
ZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5
U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0
SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1Np
bXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFj
Y2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisg
ICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50
cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0
QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsK
LSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygp
ID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0
YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEp
IHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1h
a2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4g
T3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKLSAgICAg
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVz
LCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFy
aWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgp
KSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2
YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJp
YW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlTdGF0dXMubnVtVmFyaWFudHMo
KTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5U3RhdHVzW3Zh
cmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlk
U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBp
c0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVj
dCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCArNTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5s
aW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMs
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3Rh
dHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0
aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlP
ZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwot
ICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAg
ICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFw
aChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0
YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAg
ICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAg
ICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVw
bGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgc3RvcmUo
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5M
SUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgIGFk
ZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkg
ewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5
SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTEzNSwxMiArNTEzNCwxMiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwg
cHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7
CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBs
b2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOwogICAg
ICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVmYXVsdDogewotICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVj
bWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfSB9
CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1
dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAg
ICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8
fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxp
bmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICgh
cHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAh
T3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVz
LmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAg
IGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5m
byhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0g
ICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2Vz
Q2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygp
CiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygp
Ci0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgfHwg
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVO
YW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCks
IGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTIxMSwy
OSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAg
IAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9y
aWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwog
ICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJ
ZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0
YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZh
cmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmll
ck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRC
eU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsK
LSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07Cisg
ICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2
YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CisgICAgY2FzZSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNE
ZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwog
ICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQw
ICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAg
ICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSBmYWxzZTsKIAotICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVP
cmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxl
ZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAg
ICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uIEZvciBgcHV0
X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29tZSBpbmZvIGZyb20KLSAgICAgICAgICAg
ICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hlZCBjZWxsIHRoYXQgd2UgY291bGQgdXNl
IGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjc3OQotICAgICAgICAgICAgICAgIGlm
IChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8K
LSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkg
ewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwot
ICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAg
ICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAs
IG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVu
dGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmll
ci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1i
b2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lz
Q29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lk
ZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVp
ZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAg
bG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQp
OworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgYnl0ZWNvZGUubV9wdXRL
aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRy
eUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5mbyhieXRlY29kZS5tX3B1dEtpbmQp
LCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAg
ICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxp
bmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmln
aW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1
aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0
T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKKyAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywg
dWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRP
cGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAgfQogCkBAIC03OTc5LDEzICs3OTY4
LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXM7Cisg
ICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwogICAgICAgICAgICAgICAgIGlmICh1
aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQotICAgICAgICAgICAg
ICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisg
ICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpS
ZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXpl
KCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5m
byhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQo
Ynl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg4MTks
NDUgKzg4MDgsMjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNv
ZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGUKICAgICBOb2RlKiB2YWx1ZSA9
IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICBib29sIGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5
SWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
cjsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVz
OwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29k
ZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQg
aW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAg
IC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAg
ICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAg
ICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
Y29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBi
eVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2Vs
bCgpKTsKKyAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAg
ICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisKKyAgICAgICAgUHV0QnlTdGF0dXMg
c3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0
YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3Vy
ZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRp
Zmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2Vs
bCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlk
KSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1dEJ5
SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAg
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigp
LCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIs
IHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1v
ZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQog
CiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAppbmRleCA5MTY0NzBkMTdkNTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3
OTU4YjRhLi42ZjIwNGQyYzVkZTBhNjEyZjczMWM5NTdiNDYxZGNmMzBjNGExMWEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtNTY5LDcgKzU2OSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFy
Z3VtZW50czoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAKaW5kZXggODZhM2QwNzY2NGQ3ZmE5Mjc1MTI5OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNl
OWZmMGViNWRhNTEwZWMyMzQwNjQ2MmE3MWU4ODA5NTA5NjIyZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgx
LDcgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAppbmRleCBlYWVhZjg1ZWEyNTQx
NzI1NzU1ZjQ4Y2VmZGVkZTAzYjgxYzlmYTJhLi5iODgyNWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFk
OTMyNGE0MGMxNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAKIAogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmlj
RmlsdGVyKFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5jb250YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTUxMywxMSAr
NTEzLDkgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeVZh
cmlhbnQ6OnJlcGxhY2UodmFyaWFudC5pZGVudGlmaWVyKCksIHZhcmlhbnQub2xkU3RydWN0dXJl
KCksIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEz
LDcgKzEyMTEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFn
ZSwgY2hpbGRFZGdlKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1
ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2Rl
KiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7CiAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9
IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTIyNCw3ICsxMjIyLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBudWxscHRy
OwotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5h
ZGQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICB9CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsK
ICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAKLSAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgIGlmIChkaWRBbGxvY2F0ZVN0b3JhZ2UpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBT
cGVjTm9uZSwgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSwKQEAgLTE0MDYsMTAgKzE0MDQs
MTAgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICBpZiAoIWJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50
aWMpLAogICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCks
Ci0gICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAg
ICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICBpc0RpcmVjdCwg
cHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkK
QEAgLTE0MjQsOCArMTQyMiw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKIAogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAg
ICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKLSAgICAgICAgZm9yIChjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7Ci0gICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAg
ICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OCw3ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSB8fCBwcml2YXRl
RmllbGRQdXRLaW5kLmlzU2V0KCkpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERv
bid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhp
cy4KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlJZFN0YXR1cywgbm9kZS0+b3JpZ2luLAot
ICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCisgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeVN0YXR1cywgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAogICAgICAgICAg
ICAgRWRnZShiYXNlTm9kZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2Mz
N2UxOGYxZS4uZTY0ODE2N2MxMTg2YmM4YzkzZjMyZThjNTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0
dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0
ZTlhNWNmMmQ1NmM2NDgzZDIyYWJiYTY2NzJhYzczODUwOS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFj
NTI0OTE1M2Y5ODZlMzk4YTI2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCkBAIC0yODY1LDcgKzI4NjUsNyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0
NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzLi4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYw
YTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApA
QCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5
U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7
Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0
dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAg
ICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRhZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50
b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmEx
Y2E5OGJkMjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0y
NTIsNiArMjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1
ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdj
ZGE5YTkyLi4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDEx
IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1f
cHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihn
ZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQ
dXRCeVZhbEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAg
eworICAgICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5
VmFsR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxC
eUlkKGNvbnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNs
b3dQYXRoKQogICAgIHsKICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFw
cGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUs
NyBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9n
ZXRCeUlkc1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlW
YWxHZW5lcmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2Rl
bEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0
b3I+LCA0PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVElu
QnlJZEdlbmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRk
MGYuLjJiZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRN
b2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0
ZSkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEu
LjdjYWEyMDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2
YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRl
ICJQdXRCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAj
aW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAg
LTkyLDcgKzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRp
UHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZl
Y3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFu
dCwgMj4gdmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7
CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAs
MTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1
cyo+KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9v
bCBoYXNQdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsK
ICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0
QnlTdGF0dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlk
U3RhdHVzKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7
CisgICAgICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvLmFzPFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3Rh
dHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2Zl
OGExYWMzNzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcy
MjRlZGJlZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCkBAIC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oRmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJJbkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0
QnlJZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFu
ZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2Vj
MzhjYzA1YTQxNmVhYmViYjllMjIyMzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEw
MjhjYmEwY2JlZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2Rl
QmxvY2sqIGJhc2VsaW5lQ28KIAogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAg
ICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQg
YW5kIGlubGluZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1Yklu
Zm8gZm9yIHRoaXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwg
aXQgaXMgcG9zc2libGUgdGhhdCB3ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJl
LiBMZXQncyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAg
IC8vIDEuIEJhc2VsaW5lIENvZGVCbG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAg
ICAgLy8gMi4gKEEpIGdldHMgREZHIChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAo
QSkgY29sbGVjdHMgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdl
dCBTdHJ1Y3R1cmVTdHViSW5mbyBmcm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNl
dHRlciBjYWxsLgotICAgICAgICAgICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJv
eWVkIHNpbmNlIGl0IGlzIG5vdCBleGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0g
ICAgICAgICAgICAgICAgLy8gNS4gVGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1Ig
ZXhpdC4gU28gKEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5l
IENvZGVCbG9jayBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhp
dC4gKEIpIGF0dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZv
ciBQdXRCeUlkIChvcmlnaW5hbGx5LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0
IHNpbmNlIChBKSdzIEpJVERhdGEgaXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZh
bEluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5
VmFsSW5mby0+ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZv
KENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvKTsKICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxv
Y2F0aW9uLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMx
OGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBU
aG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBU
aGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQs
IHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdo
dCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJl
IHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRP
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFy
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNl
dC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBj
dXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4u
ODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0
OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZj
YTJjZjE0ZTJkNmI1ZDk5M2ViNmIuLjYwM2ZmN2IyZTUyZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3
ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5
ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
QEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkw
ODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNk
ZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0Ogog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2go
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEz
NDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFj
ZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNz
IFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBj
YXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgy
YzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNh
MDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA1YTNlOThmNzUzNzAxZDNiMzRm
ODRiOTgwODNkMjRkYWU4ZWY3MTAwLi5jMzlmMmRkZjM3NTM2MzFiMTUyODUxMWFiYzkwZTcxYTUw
YTMwN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4OTUxLDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwog
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5
VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJh
c2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwog
CiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZs
eSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
biwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlh
bnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygp
LmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9y
aWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3Jl
UHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5v
ZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8o
KS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygp
LmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRT
dHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2
OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53
cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmls
ZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAi
T3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1
dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5
SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRl
ZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1h
Y3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXpl
KSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0
T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3Jv
KFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBc
Ci0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3ND
YXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRC
eVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxC
eVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBc
CiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZh
NDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0
QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5k
ZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0
QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dl
dEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVm
ZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7
CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDY0NDBmZjI0MTBmMDM3MmQxYjVmYjdmMDU3N2ZkNzBmNDllMjA1NTguLjI2YWZm
ZGE1N2M0MDk1YjQ5MWFiYjU0MWYyNjI3YjFiZjBhNjFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVm
Zm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5k
ZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQs
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1
dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21w
aWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0
QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
V2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hl
YWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRl
TmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyKTsKIApAQCAtMzg0LDM2ICszNTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBS
ZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1p
dEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CiAgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKik7Ci0gICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCi0gICAgICAg
IC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50
LWNoZWNrZWQgYW5kCi0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVj
a2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAgICAgICAgLy8gcmV0dXJucyB0
aGUgc2xvdyBjYXNlcy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1
bXBMaXN0IGVtaXRJbnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8sIEludDMyU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJh
ZFR5cGUsIGJ5VmFsSW5mbywgRG91YmxlU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1
dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICB9Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRp
Z3VvdXNQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5
VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlU
eXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlW
YWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0xMDY0LDYgKzEwMDgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dl
dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9n
ZXRCeUlkc1dpdGhUaGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9w
dXRCeUlkczsKKyAgICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFs
czsKICAgICAgICAgVmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAg
ICBWZWN0b3I8SklUSW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9y
PEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0xMDkxLDYgKzEwMzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9N
QVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFY
IH07CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAg
ICAgdW5zaWduZWQgbV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWdu
ZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZh
bEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsg
VUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBj
Njc2Yzg4Y2Y2NC4uYTkwYzg2OWQzOTc5OTc2YzZmZmE2ZWRkMjNmYzMyNjM0NDJmNTlmMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRC
eUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVn
IHNjcmF0Y2gsIAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAg
ICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHVi
SW5mb0dQUikKKyAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2Rl
KQogICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw2NyBAQCB2
b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwg
TGlua0J1ZmZlciYgc2xvd1BhdGgpCiAgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1f
c3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0
b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGpp
dFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2lu
ZCkKKyAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9k
ZSkKKyAgICAsIG1fcHV0S2luZChwdXRLaW5kKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBt
X3ZhbHVlKHZhbHVlKQoreworICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOworCisgICAgbV9zdHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOwor
ICAgIG1fc3R1YkluZm8tPnJlZ3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7
CisgICAgbV9zdHViSW5mby0+dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiA9IHN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgbV9zdHViSW5mby0+YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9z
dHViSW5mby0+dmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52
LnByb3BlcnR5VGFnR1BSID0gcHJvcGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBK
SVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0
KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxl
SnVtcCgpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xv
d1BhdGgpCit7CisgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0
aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQ
dHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0
aW9uX0dTc2lKSkMgSklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQorewor
ICAgIHN3aXRjaCAobV9wdXRLaW5kKSB7CisgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgIGlmIChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBN
YWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJS
ZWcgc3R1YkluZm9HUFIpCiAgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdp
biwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRl
eCBlZTY4MTQxMDFhODFlYmQxNTViZjRkYjY5M2ZmNDdjOGEyNzhmN2ZiLi4zMDViNzBkM2Y5MmIx
ZmUzYjVhNjY3ZGIzMzQ0YmI2NjdkNmZiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAg
Y2xhc3MgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRH
ZW5lcmF0b3IgewogCiBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJ
VEJ5SWRHZW5lcmF0b3IgewogcHVibGljOgotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAg
ICAgICA6IG1fZWNtYU1vZGUoRUNNQU1vZGU6OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAog
ICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNW
YWx1ZVJlZ3MgYmFzZSwKQEAgLTE0MiwxMCArMTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRp
b25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUg
bV9lY21hTW9kZTsKKyAgICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgp
IH07CiAgICAgUHV0S2luZCBtX3B1dEtpbmQ7CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcg
QmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAg
ICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vz
c1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93
UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAu
bV9qdW1wOworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhM
aW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisKKyAgICBWX0pJVE9wZXJhdGlvbl9H
U3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKKworcHJpdmF0ZToKKyAgICBFQ01BTW9kZSBtX2Vj
bWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CisgICAgUHV0S2luZCBtX3B1dEtpbmQ7CisK
KyAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CisgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKKworICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOworfTsKKwogY2xhc3MgSklURGVsQnlWYWxHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogICAgIHVzaW5nIEJh
c2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggNzc0NGI1MDgzN2FlYTdiYTA4NWEwMTM0NWZiYmYyYjY4
YmYwZDQyNS4uNzdhZjViMTMzZjQ1ZmIxMWQ0MDViMzY5OTJiZTBjNzI4MDY0YTAzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTM2NCwyNCArMzY0LDYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmkKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVBy
b2ZpbGUtPmFkZHJlc3NPZk91dE9mQm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2Rl
IEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRv
IGFycmF5UHJvZmlsZVNhdyA9IFtdIChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlw
ZSBjYXBhYmlsaXR5KSB7Ci0gICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5n
VHlwZWRBcnJheXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5
TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwot
ICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAg
ICByZXR1cm4gSklURG91YmxlOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2Rlcywg
SW50MzJTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9m
aWxlU2F3KGFycmF5TW9kZXMsIEFycmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJ
VEFycmF5U3RvcmFnZTsKLSAgICByZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVl
ZGY4NzE1ODM4ZDc3NWJlY2M3MWY4MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIw
NjEwMGExNWRhOTcxOWEyOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnko
dm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1
dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJl
cGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpO
b3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRp
ZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0
Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3RE
aXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRp
ZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRp
Zmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNo
UHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRl
bnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVj
dCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlm
aWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJ
RChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04
ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VO
VVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNh
Y2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAg
ICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3Qs
IG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIs
IHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFj
Y2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUp
KTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxv
Y2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJ
RChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNl
dCk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQ
dXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlW
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwg
RUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgp
KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWlu
dDMyX3QgaSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAg
ICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0
Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2Zp
bGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAg
ICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5w
dXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJp
Y3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMg
dm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VW
YWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0
KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0
LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
ICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8t
PmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhj
ZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBp
ZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVh
YmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgp
ICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxP
YmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2Ny
aXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkg
ewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQz
Ml90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5p
bmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRP
dXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAg
ICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3Qs
IGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0
SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNo
ZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwg
YnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBD
b21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNl
T2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBA
IGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0
aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
SlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUq
IHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAg
T3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFs
dWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5k
ZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7
Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlm
IChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0
dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0g
aml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0
QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8t
PmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29k
ZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNl
T2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRl
KGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2
bSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7
CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElm
IHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2Vw
dHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAg
ICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1p
emVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAg
ICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9
CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJD
ZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vi
c2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAg
ICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENv
bnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAg
IGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXko
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkg
fHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxG
cmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbElu
Zm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQo
KSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwot
ICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAg
ICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAg
ICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNl
ZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJl
QmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1
dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAm
JiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewot
ICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91
dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQg
bWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0
aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBv
ZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRf
YnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVu
IGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZh
bEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0
aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFN
b2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUg
ZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsK
ICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0
KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9w
dGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJl
c3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgot
ICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1p
emUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQog
Ci1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSog
cHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6
aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6
ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0g
ICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4
KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmpl
Y3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRl
eGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgot
ICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVj
dHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXRE
aXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsK
KyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1
YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYg
KHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUp
OwotCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2
bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAg
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAg
ICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2Ug
aGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3Qg
ZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZt
KS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNo
ZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsK
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAh
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09
IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2
ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vl
bk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4
dCgpKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0
aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAg
ICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwg
YmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nl
c3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNj
cmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGlu
Z0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAg
ICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVj
dHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRL
aW5kOjpEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXpl
ZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkg
ewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0
aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRo
YXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJj
ZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0
aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBn
ZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBl
dmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKyti
eVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3Qs
IHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0
aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVj
dCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1p
emF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAg
ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFN
b2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBF
Q01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFs
T2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUp
OworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxl
LCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUq
IHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAor
CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1
ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChn
bG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1v
ZGU6OnNsb3BweSgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5p
c09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJh
c2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAg
c3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUs
IEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChi
YXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVl
KSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAog
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAppbmRleCAyNTg0ZTk5NWU0NjZkZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3
MzU0MmZjM2Y0YmU4M2UwNmJlMDYyNTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2
YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQ
dXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVO
YW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2Rl
KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmls
ZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5j
b2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVy
blR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXgg
NTY2OGRmYmU0MWQxMmE5MjI0YTQzYzA4ODEzNGUzY2M1Yzg0Y2M3ZS4uZDZjYWUyYTFmMGIyYjA3
Y2MxY2RmNTIxNzNlZDRmNjkxMmU0YjIwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCwxNzcgKzQzOCwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0g
Ynl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVf
djxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7
CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5
dGVjb2RlSW5kZXgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0
YW50SW50KHByb3BlcnR5KTsKLSAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQp
Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJl
Z1QxKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdElu
ZGV4OwotICAgIGlmICghcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFy
SnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1w
SWZOb3RJbnQocmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIFNlZSBjb21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAg
IHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwotICAgIH0KICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKIAotICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhN
RTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAo
bW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQz
MlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5
VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMyksIHJlZ1QyLCBlY21h
TW9kZSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
bm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1
b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5
cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7
Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5
cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3Jy
ZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGlu
Z1NoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gz
MihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0KLSAgICAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QyKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAg
IGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJlZ1QzKSk7Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTog
ewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOwotICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGQ2NChu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDMpOwotICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMywg
ZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkp
OwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1Qw
LCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmU2NChyZWdUMywg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOwotICAgIAotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1Qz
KTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsK
LSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFs
SW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAgICAgICAgIGZh
ckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhp
cyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAgSnVtcCBl
bXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJl
c3VsdCh0aGlzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0g
ICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNv
ZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5kID0ganVt
cCgpOwotICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkp
KTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0gICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDEpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwor
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVu
ZC5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNl
bGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTY2MSwxMiArNTE1LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAg
ICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAg
IGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTY3
NCw0OCArNTMxLDQyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAg
ICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9w
dXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyLCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMywgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDI7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1
bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICAvLyBUaGV5IGFyZSBhbHJl
YWR5IGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IG1vZGlmaWVkLgorICAgIC8v
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIC8vIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1Q1OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQogICAgIENhbGwgY2FsbDsK
KyAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplOworICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwogICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CisgICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xv
d1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC03MzAsMjQgKzU4MSwyNCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1QyOwogICAgIGppdC5zdG9yZTMyKGJ5
dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJn
dW1lbnRHUFIwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVj
bWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDU7CiAKICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2Jh
bE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk+
KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5m
b0dQUiwgZWNtYU1vZGVHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsKICAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1l
bnRHUFI0LCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRy
VGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgZWxzZQogICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgwOSwxMyArNjYwLDEzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1
bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1
dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlW
YWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihwdXRLaW5kLnZh
bHVlKCkpLCBwdXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKQEAgLTg1MSwxNCArNzAyLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIg
PSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1l
bnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFBy
aXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFsT2Jq
ZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5mb0dQUiwgcHV0
S2luZEdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpAQCAtMzI5MCw4MiArMzE0
MSw2IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXN0ZXJJRCBjZWxs
LCBSZWdpc3RlcklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRzTGlua0ZvcldyaXRl
QmFycmllciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEpJ
VEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsK
LSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlU
eXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChpc0ludCh0eXBlKSkK
LSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMK
LSAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5
IG5ldmVyIGNvbWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5z
bG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5m
by0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZv
LT5kb25lVGFyZ2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAg
ICAgIEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxlZS5leGVj
dXRhYmxlQWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYXJDYWxscy5sYXN0KCku
ZnJvbSwgbV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBp
c0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFs
X2RpcmVjdDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGlu
ZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1f
Y29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAg
ICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIs
IEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWxf
ZGlyZWN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7
Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+
bV9iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3Mp
KSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0K
LS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRp
b24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBl
eHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci10ZW1wbGF0
ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRB
cnJheU1vZGUpOwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhD
YWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0zNDA3LDIyMyArMzE4Miw2
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQg
cHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJU
KChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bj
b2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdp
dGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNs
b3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmICghbV9leGNlcHRp
b25DaGVja3MuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNo
ZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgY2FsbFNpdGUgOiBtX25lYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVl
KQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5j
YWxsZWUpOwotICAgIH0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9mYXJDYWxs
cykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBnZW4u
ZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVyKTsKLQotICAgIGJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywg
cGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgcHV0
X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0KSA/ICJfZGlyZWN0IiA6
ICIiLCBwcm9wZXJ0eU5hbWUudWlkKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIGJ5VmFs
SW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9ub3RJ
bmRleEp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5m
by0+bV9zbG93T3BlcmF0aW9uID0gcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+
bV9ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihi
eVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNz
KSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJv
bSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdl
IGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10
ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1
dEJ5VmFsPihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIs
IFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2Rl
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVn
VDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklE
IGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdU
NDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBw
cm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0g
ICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNj
cmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1
dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAo
QWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUo
dHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKSk7Ci0j
ZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpKTsKLSNlbmRp
ZgotICAgIAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4g
Z2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhl
IGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VD
b25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxh
dGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7Ci0gICAg
ICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYp
KTsKLSAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVh
cmx5U2NyYXRjaCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAoKTsKLSAgICAgICAgdG9v
QmlnLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZmYpLCBlYXJseVNj
cmF0Y2gpOwotICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAgICAgIGluQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
LSAgICBjYXNlIDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRl
U2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
MjoKLSAgICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAg
ICAgc3RvcmUzMihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHks
IFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Ci0gICAg
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7
Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0
ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwot
ICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2Ny
YXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBS
ZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7
Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlT
Y3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAg
ICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1w
VGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlw
ZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZv
clR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlw
ZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAg
ICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihl
YXJseVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBS
ZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhp
cyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJseVNjcmF0Y2gp
KTsKLSAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKLSAgICBtb3Zl
NjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7
Ci0jZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsK
LSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKTsKLSAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIEp1bXAg
cmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRl
U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbmRpZgotICAgIAot
ICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3Zh
bCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8g
YmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25h
bGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNo
MiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0
eXBlKSkgewotICAgIGNhc2UgNDoKLSAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdU
MCwgZnBSZWdUMCk7Ci0gICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVT
Y3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
ODoKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBw
cm9wZXJ0eSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCBi
OThiZmVjZWRhYTU1NjAxZjk1YTg4YmVkYTYxYjA5ZjFhMzQzNDcxLi5mYmUxYTAzN2YyOWQyYzNm
OGRiM2FkYTkyMTljYWE1Zjg3MWI2M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ2NiwxNTAgKzQ2NiwyNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVj
bWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6
OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5k
OjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAorCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgCisgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1Q1LCByZWdUNCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2Us
IHJlZ1QxKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBh
ZGRTbG93Q2FzZShub3RJbmRleCk7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMSwgcHJvZmlsZSk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91
bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEpOwotICAgIAotICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAg
IGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5
dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJ
VERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJy
YXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAot
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4
LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAg
ICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29udGlndW91c1NoYXBlKSk7Ci0gICAg
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBj
YXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQz
MihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlMzIocmVnVDAs
IEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDMpOwotICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAg
ICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVn
VDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVn
VDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBS
ZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFs
Q2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhp
cyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2Fz
ZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbElu
Zm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcs
IGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Cisg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7IC8v
IHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8gdGFnCi0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAK
LSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUzMihy
ZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGVuZC5saW5rKHRo
aXMpOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
KyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUg
ZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTYxOSwxMiArNDk2LDE1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3Qo
KTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2Fk
ID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklUOjplY21hTW9kZShieXRl
Y29kZSk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02MzIsMjEgKzUxMiwyMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0gICAg
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwotICAgIAorCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CisKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1
Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgogICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBo
YXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CisgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1pdExv
YWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1
LCByZWdUNCksIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKIAot
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQ
YXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXgrKzsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAppbmRleCAzN2E4MGIyOTU3NzIxMGYzNWUwNmQ4MWJhMTM0NWY2OTc4MDA5NjQ0Li40YjcxYTBm
YTlmZDk5MDMxM2NhNGFiNzlkMTk0M2Y4YzgxZDdmMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKQEAgLTU2OCw1MyArNTY4LDk0IEBAIHZvaWQgcmVwYXRjaEFycmF5R2V0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTCiAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIGF1dG8gYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBw
dXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKK3N0YXRp
YyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1
dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1v
ZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0OworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6
IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNl
dDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGlj
IGF1dG8gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewot
ICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsK
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZh
bDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRL
aW5kKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTY4Miw4ICs3MjMsOCBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jawogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gs
IG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEJ5S2luZCwgcHV0S2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC04MTcsMTIg
Kzg1OCwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkQWRkQWNjZXNzQ2FzZSwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkp
OworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAKICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0
cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2Fz
ZSkpOwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwogCkBA
IC04MzUsMTIgKzg3NiwxMDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICByZXR1cm4g
cmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRl
cjsKIH0KIAotdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5
S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQor
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30K
Kworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCkKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
KworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlm
IChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlT
dG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDhDbGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50
MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJy
YXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmln
SW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2Ut
PmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlT
dG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUs
IG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsK
IH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5
U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2LDcgKzExMjEsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYm
ICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdl
bmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJbkJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5MSw1NSBAQCB2b2lkIHJl
c2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgR2V0QnlLaW5kIGtpbgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgcmVzZXRQdXRC
eShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRC
eUtpbmQga2luZCkKIHsKLSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5jdGlvblR5cGUgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUND
YWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAg
IEZ1bmN0aW9uVHlwZSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQot
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUp
Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6
ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJ
ZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1p
emVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2Fs
bFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rp
b25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAg
ICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJp
YyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgfQogCiAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRp
bWl6ZWRGdW5jdGlvbik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1
dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRC
eUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNj
ZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KIH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2MzczYzBhYzM2
MjlkOGU2Li5lY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBjbGFzcyBH
ZXRCeUtpbmQgewogICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3MgUHV0QnlL
aW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxCeUtpbmQg
ewogICAgIEJ5SWQsCiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFzcyBJbkJ5
S2luZCB7CiAKIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiB2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUs
IENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBD
b2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBy
ZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUg
YmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9k
ZSk7Cit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFs
dWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRj
aERlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90
JiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1
YkluZm8mLCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxP
YmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wg
d2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtp
bmQpOwogdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcihDYWxs
RnJhbWUqLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5m
byYpOwogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeUlEKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCByZXNldERlbEJ5KENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZvaWQgcmVzZXRJbkJ5KENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXNldEhhc1By
aXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKaW5kZXggN2VlYTc1
ODcwZTdiMTUyOTY5MTBkNWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2IwNzkxNGVlZDdmNjc3Nzk5
MDFmYmJhMzA2YmM0NzEyYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogLy8gVGhlIGZvbGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBmb3IgdGhlIG9wY29kZSBu
YW1lcy4gVGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBH
ZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8gYmVjYXVzZSB0aGVyZSBp
cyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlTdGF0dXMuY3BwKQogLy8g
d2hpY2ggcmVmZXJzIHRvIHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZWZpeGVk
IHdpdGggImxsaW50XyIuCiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50YXRpb24sIHRoZSAyIGFy
ZSBlcXVpdmFsZW50LiBIZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFsaWFzIGhlcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436158</attachid>
            <date>2021-08-23 01:04:17 -0700</date>
            <delta_ts>2021-08-23 01:33:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823010416.patch</filename>
            <type>text/plain</type>
            <size>296182</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5iZmEwMTg1YTI5OGI2ZTgw
NzViYWZmNzgwNmI5YzNiNWEwZmE3Njc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5r
VG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJz
aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojpv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJp
YW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQ
dXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNo
ZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFu
dDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlND
OjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0
dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwp
OgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAg
KiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZh
bCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRC
eUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVy
YXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZh
bEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OmNob29zZUFycmF5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAo
SlNDOjpwdXRCeVZhbCk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6cHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OmRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUpOgorICAgICAgICAoSlNDOjp0cnlQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6dHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjphcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNo
ZVB1dEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEFycmF5UHV0QnlWYWwp
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6cmVwYXRjaFB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQp
OiBEZWxldGVkLgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oOgorCiAyMDIxLTA4LTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIGFscmVhZHktc2hpcHBlZCB3YXNt
IG9wdGlvbiBmbGFncwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGQ2Y2I0MzIy
OTI3ZjIyMTVhNjMyZDM4OTNiZGM5YzM4MjVmYTdhLi4zMjNkOGE0MGUxZjZlMjNmY2UyN2VkN2Mw
OGRiNTMyNDczYjI2YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDY0LDkg
KzQ2NCw5IEBACiAJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVF
MUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYg
LyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkEw
MTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1
RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5
QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhB
M0YgLyogUHV0QnlWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBU
cmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjMw
M0ExRDQxOTJDODAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyog
Q2VsbEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjg2NiwxMSArMjg2NiwxMSBAQAogCQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYz
QzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTUx
NENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdldEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRC
eUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjk5MTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQdXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlh
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0
QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeVZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkE5RjFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0UmFjZUtl
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUEwMURGNzg2MDcwMEUw
NkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlzaXRSYWNlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQUJBMUI0
ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04Njk1LDEwICs4Njk1LDEwIEBACiAJCQkJMEZEM0U0MDgxQjYxOEI2
NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi8sCiAJCQkJMEYxNUNEMjAxQkE1Rjk4
NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgKi8sCiAJCQkJMEYxNUNEMjExQkE1Rjk4NjAw
MzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oICovLAotCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5jcHAgKi8sCi0JCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0
dXMuaCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNw
cCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggKi8s
CiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKIAkJCQkwRjQ0
QTdBRDIwQkY2ODVGMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5jcHAgKi8sCiAJCQkJMEY0
NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAqLywKQEAgLTEwNTA2
LDggKzEwNTA2LDggQEAKIAkJCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZv
a2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJl
TmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0
QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzJBNDE0
Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTNC
NEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNjQ3MDJk
YjYwMWNjMjFhYmI0YzI2Mjk0NTdkZDFhNzU5YzMwMjBkLi43MDc3ZWY5YWUzMTE3NmY2Mzg1ZWJl
MzRjY2IzMWE1MDVjMTkxZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNjks
OCArMjY5LDggQEAgYnl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAKIGJ5dGVjb2RlL1Byb3Bl
cnR5Q29uZGl0aW9uLmNwcAogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKIGJ5dGVj
b2RlL1B1dEJ5SWRGbGFncy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCi1ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKK2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAorYnl0ZWNvZGUv
UHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2Rl
L1JlZHVjZVdoaXRlc3BhY2UuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKaW5kZXgg
ZmE4YjZiMjJlM2E0ZTJkYzk1MGM3YmIyNDY5N2U2OTgyODBjMzViNi4uNzYyOGNiMzBlMWRmZTNi
MzAyMzNjZWY5MGI3ZGM3ZjhkY2U2MjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcApAQCAtOTksNiArOTksMTkgQEAgUmVmPEFjY2Vzc0Nhc2U+
IEFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlw
ZSwgQ2FjaGUKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFwcm90b3R5cGVBY2Nlc3NDaGFpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CkBAIC0yNzIsNiArMjg1LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2tTa2lwcGluZ0NvbnN0YW50SWRlbnRpZmllckNoZWNrKCkgY29uc3QKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRl
eGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFt
cGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNiw2ICszNTIsMTkgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSBjb25zdAogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc4LDYgKzQxNywxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OnJlcXVpcmVzSW50MzJQcm9wZXJ0eUNoZWNrKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250
aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDI1LDExICs0NzcsMjQgQEAgYm9vbCBBY2Nlc3NDYXNl
OjpuZWVkc1NjcmF0Y2hGUFIoKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEluZGV4ZWRE
b3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC01MTUsNiArNTgwLDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVu
dENlbGwoVk0mIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTY5LDYgKzY0
NywxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWTSYgdm0sIFZlY3RvcjxKU0NlbGwq
PiogY2VsbHNUb01hcmtJZkRvZXNDYWxscykgY29ucwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgZG9lc0NhbGxzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUmVwbGFjZToKQEAgLTY1MCw2ICs3NDEsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBs
YWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6
CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3Vv
dXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRTdG9yZToKICAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CiAKICAgICBj
YXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKQEAgLTExOTksOSArMTMwMyw2IEBAIHZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGlzT3V0T2ZCb3VuZHM7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0Vt
cHR5OwotCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VS
ZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwpAQCAtMTIyNywxNiAr
MTMyOCwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAg
ICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNo
R1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3Jh
dGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJ
ZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3Jh
dGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNj
cmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzYz
LDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
ICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAg
ICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNo
RlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJs
ZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGlt
ZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0Vt
cHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
I2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBK
U1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlz
RW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAg
ICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM4NywyNjkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQo
KTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAg
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVt
cHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNl
IEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNv
ZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBi
YXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUu
dS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3Jw
aGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldy
aXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5k
ZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9j
YXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9Owor
CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmICht
X3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisg
ICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxI
ZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vs
c2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKworICAgICAgICAgICAgc3RvcmVS
ZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVn
cywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50
MzJTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToK
KyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBz
dG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsK
KyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7
CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkg
PSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4o
c3RhdGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQ
UigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChw
cm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBl
bWl0dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0
LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBp
ZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgewogICAgICAgICAgICAgaXNP
dXRPZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAgICAgICAgICAgIC8vIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5z
dWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQ
cm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFs
Q2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZh
aWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFz
ZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlw
ZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0
ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAg
ICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1
ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElmTm90
SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIGF1
dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZqaXQp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAg
ICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJs
ZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwg
dmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgLy8gT3V0T2ZCb3Vu
ZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0
aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOworCisg
ICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJl
Z2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOwor
ICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkKKyAgICAgICAgICAgIHNjcmF0Y2gzR1BSID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25k
aXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsK
KyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFKU0M6
OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgc2NyYXRjaDNHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRv
b0JpZyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuLCBzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGpp
dC54b3IzMihzY3JhdGNoM0dQUiwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8g
Y2xhbXBlZCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgdG9vQmlnLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhm
ZiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgaW5Cb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU4KHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMTYodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNUd28pKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Zv
dXIpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChpc091dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGlzRW1wdHkpOworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBS
UmVnKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3Rh
dGUuc2NyYXRjaEZQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlRmxvYXQoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMjE4Myw2ICsyNTM3LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVj
a1ByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgLy8gVGhlc2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNp
bmNlIHRoZSBndWFyZCBpcyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNh
biBiZSBzdXJlIHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0
aGVzZSBzaW5jZSB0aGV5CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUg
Y2hlY2tzLgpAQCAtMjE5NiwyMiArMjU2MywzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNl
Ojp0b1R5cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBl
ZDsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAg
ICAgICAgIHJldHVybiBUeXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAg
ICByZXR1cm4gVHlwZUZsb2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJl
dHVybiBUeXBlRmxvYXQ2NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjI4NCw2ICsyNjYwLDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2Fu
QmVTaGFyZWQoY29uc3QgQWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRB
cnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRT
dHJpbmdMb2FkOgogICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXgg
NDE5Yzk5YzkwZjQzOTAxODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uMTg2NDRhZDUxMGY4MGJi
ZDk3NTFmODM2NjcwZmY5MGE5MzEwODQzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIElu
ZGV4ZWRTdHJpbmdMb2FkCisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRl
eGVkSW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRl
eGVkQ29udGlndW91c1N0b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0
b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0U3RvcmUsCiAgICAgfTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdh
ZDBkZjg4MjExMDdmZTNiODQ5MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcy
YjRkYzJhMWQxODkyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lDU3RhdHVzTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3Rh
dHVzTWFwLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBHZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQ
dXRCeUlkU3RhdHVzOworY2xhc3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4
LDcgQEAgc3RydWN0IElDU3RhdHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7
IG51bGxwdHIgfTsKICAgICBHZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAg
IEluQnlTdGF0dXMqIGluU3RhdHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1
dFN0YXR1cyB7IG51bGxwdHIgfTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0
ciB9OwogICAgIERlbGV0ZUJ5U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAppbmRleCA4MTA0YTJmMzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40
NzEzNTE5ZGJhOTRiMjE0ZmNlNDU3MTBkNzZiMjEyM2FmZDcwYjcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTEw
MjIsNiArMTAyMiw0NSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNj
ZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFN0
cmluZ0xvYWQ6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFN0cmluZ0xvYWQiKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQo
IkluZGV4ZWREb3VibGVTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRD
b250aWd1b3VzU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlw
ZWRBcnJheUludDhTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgICAgIG91dC5w
cmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRB
cnJheUZsb2F0MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDVhZmFiOWQzOWM3YTRlYTZlNjFjZjU2NDhhZWZhYzkwYzFmN2MyZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCi0KLSNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb21wbGV4R2V0U3RhdHVzLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5o
IgotI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50KQotewotICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50
cywgdmFyaWFudCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6c2hyaW5rVG9GaXQoKQotewot
ICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZN
JiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9
IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
OwotCi0gICAgLy8gV2UgYXJlIG5vdCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFu
eSBwbGFjZSBmb3IgYHB1dF9wcml2YXRlX25hbWVgLgotICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9y
dCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2Ug
aGF2ZQotICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4K
LSAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Ci0KLSAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7Ci0gICAgaWYg
KCFzdHJ1Y3R1cmVJRCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
bik7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwotCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJl
SUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwotICAgIGlmICghbmV3U3RydWN0dXJlSUQp
IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0g
ICAgfQotCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0
KCkpKSB7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAg
dm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIG9mZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNT
dGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
IGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2Nr
KTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVp
ZCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGRpZEV4aXQpCi0gICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1Yklu
Zm87Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAg
ICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0
YSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHBy
b2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLSNlbHNlIC8vIEVOQUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRpZEV4aXQpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsK
LSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLCB1aWQsCi0gICAg
ICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNp
dGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkg
PSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5m
byk7Ci0gICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKHN1bW1hcnkpOwotICAgIAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSgpKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7Ci0gICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlz
dCA9IHN0dWJJbmZvLT51LnN0dWI7Ci0gICAgICAgIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHJl
c3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAg
aWYgKGFjY2Vzcy52aWFQcm94eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy51
c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlND
OjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKLSAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3
U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVy
ZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxl
eEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBh
Y2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29t
cGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJs
ZTogewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IGNhbGxMaW5rU3RhdHVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5r
SW5mbygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
ZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2Fs
bExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXN1
bHQuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAg
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgIH0KLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2Vs
aW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgRXhp
dEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNv
ZGVJbmRleCk7Ci0KLSAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRT
dGFjaykgewotICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdp
bik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeUlkU3Rh
dHVzJiByZXN1bHQpIC0+IFB1dEJ5SWRTdGF0dXMgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVz
IGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgYmFzZWxp
bmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVS
ZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0
RnJvbUlubGluZWQpKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24o
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHJl
c3VsdDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIHVpZCwg
Y2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0
LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQotICAgICAgICAgICAg
cmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVp
ZCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwg
UHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQotewotICAgIGlmIChwYXJz
ZUluZGV4KCp1aWQpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLQotICAgIGlmIChzZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cygpOwotICAgIAotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBQdXRCeUlk
U3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVj
dHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKLSAgICAgICAgICAgIC8v
IHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3Vj
aCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCi0gICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhy
b3cgZXhjZXB0aW9uLgotICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZp
bmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3JPclZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0
dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5w
cm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOwotICAgICAgICAgICAgaWYg
KCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlz
IHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgotICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVh
bnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhp
bmcgZmlzaHkgaXMKLSAgICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90
IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50Ci0g
ICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8g
dGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KLSAgICAgICAgICAgICAgICAv
LyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgotICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0KLSAgICAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQ
cml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0Ci0gICAgICAgIC8vIHNob3VsZCBuZXZl
ciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCi0g
ICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVs
ZC4gV2UgbmVlZCB0byB0YWtlCi0gICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRp
b24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgotICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0
S2luZC5pc1NldCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0KLSAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBh
IHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgICAg
IC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgotICAgIAotICAgICAg
ICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgotICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUg
Y29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUg
dXAsIHNpbmNlCi0gICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRp
ZXMgdG8gc3RyaW5ncy4KLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwot
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQ
dXRLaW5kLmlzTm9uZSgpKTsKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAg
ICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gV2Ugb25seSBv
cHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRp
b24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQotICAgICAg
ICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOwotICAgICAgICBpZiAoIXRy
YW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgICAg
IGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5z
aXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7Ci0gICAgICAgIGlmICghZGlkQXBwZW5kKQot
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQot
ICAgIAotICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0j
ZW5kaWYKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAg
ICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1f
dmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRl
bXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRv
ciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRv
ciYpOwotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBmb3Ig
KFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewotICAgICAgICBpZiAoIXZh
cmlhbnQuZmluYWxpemUodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjptZXJnZShjb25zdCBQdXRC
eUlkU3RhdHVzJiBvdGhlcikKLXsKLSAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0
aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkg
ewotICAgICAgICAqdGhpcyA9IFB1dEJ5SWRTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5t
YWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotICAgIH07Ci0gICAg
Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAg
ICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2lt
cGxlOgotICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghYXBw
ZW5kVmFyaWFudChvdGhlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwot
ICAgICAgICB9Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAg
ICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKLXsKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7Ci0gICAg
Zm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlh
bnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKG1fdmFyaWFu
dHMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLX0KLQotdm9p
ZCBQdXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICBvdXQucHJp
bnQoIihOb0luZm9ybWF0aW9uKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgU2ltcGxlOgotICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwg
IikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6
Ci0gICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4NzhlMjUyZGI2OWFjNTcxM2RjOGU4ZjhiNjQ0MDAwY2FlNjMwYjFmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJFeGl0
RmxhZy5oIgotI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUZpZWxk
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0jaW5jbHVkZSAiU3R1Yklu
Zm9TdW1tYXJ5LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFz
cyBWTTsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlOwotY2xhc3MgU3Ry
dWN0dXJlQ2hhaW47Ci1jbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotdHlwZWRlZiBIYXNoTWFw
PENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aD4gU3R1YkluZm9NYXA7Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0dXMgZmluYWwgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICAv
LyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgIE5vSW5m
b3JtYXRpb24sCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNv
bWUga2luZC4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVu
IHRha2Ugc2xvdyBwYXRoLgotICAgICAgICBUYWtlc1Nsb3dQYXRoLAotICAgICAgICAvLyBJdCdz
IGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgotICAgICAgICBNYWtlc0NhbGxz
Ci0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKCkKLSAgICAgICAgOiBtX3N0YXRlKE5v
SW5mb3JtYXRpb24pCi0gICAgewotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3Rh
dHVzKFN0YXRlIHN0YXRlKQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93
UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNp
dCBQdXRCeUlkU3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChzdW1tYXJ5KSB7Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9y
bWF0aW9uOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAg
IGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBT
dHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFr
ZXNTbG93UGF0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9
IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1
cyhjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLSAgICAgICAgOiBtX3N0YXRlKFNpbXBs
ZSkKLSAgICB7Ci0gICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3Rh
dHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcs
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVz
IGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKLSAg
ICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxp
bmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYg
Y29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLQotI2lm
IEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZv
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSNl
bmRpZgotICAgIAotICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQot
ICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3Jt
YXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IFNpbXBsZTsgfQotICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAg
ICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICBQdXRCeUlkU3RhdHVzIHNsb3dWZXJzaW9u
KCkgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+
JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KLSAgICBjb25zdCBQdXRC
eUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2lu
ZGV4XTsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6
ZShWTSYpOwotICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwotICAg
IAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwotICAgIAotICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSklU
KQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAg
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8q
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNp
dGVEYXRhKTsKLSNlbmRpZgotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0g
ICAgCi0gICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NGQ2NDc4MmE5NjQzOTMwOWFlOWEx
ZmEwNDhhMzg3MjU1MjFmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUHV0QnlJZFZhcmlhbnQuaCIKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5j
bHVkZSAiSGVhcElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRWYXJpYW50
OjpQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgOiBQdXRC
eUlkVmFyaWFudCgpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotUHV0QnlJZFZhcmlhbnQm
IFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQot
ewotICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKLSAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVy
Lm1fb2xkU3RydWN0dXJlOwotICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1
cmU7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKLSAgICBtX29m
ZnNldCA9IG90aGVyLm1fb2Zmc2V0OwotICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQot
ICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90
aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAg
ICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAg
IHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IG9sZFN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7
Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5t
X29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFu
dCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0
dXM+IGNhbGxMaW5rU3RhdHVzKQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICBy
ZXN1bHQubV9raW5kID0gU2V0dGVyOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RG
TW92ZShjYWxsTGlua1N0YXR1cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RydWN0dXJl
KiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Ci17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgIFJFTEVBU0VfQVNT
RVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9p
ZCBQdXRCeUlkVmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKLXsK
LSAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1
cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICBtX2tpbmQgPSBSZXBsYWNlOwotICAg
IG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1
dEJ5SWRWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAotewotICAgIHN3aXRjaCAo
a2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1i
b29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4ga2lu
ZCgpID09IFNldHRlcjsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIGlmIChtX29mZnNldCAhPSBvdGhl
ci5tX29mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2tpbmQp
IHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOiB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgbmV3VmFy
aWFudCA9IG90aGVyOwotICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VU
cmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBu
ZXdWYXJpYW50OwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgICAgICByZXR1cm4gYXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIpOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9
IG90aGVyLm1fb2xkU3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3
U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0
OwotICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90
aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0
dGVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgewotICAgICAgICAgICAg
aWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIW1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0
ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAg
ICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRp
dGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRp
dGlvblNldDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwot
ICAgICAgICAKLSAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1
cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQdXRCeUlk
VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHJlcGxhY2UpCi17Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsK
LSAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7Ci0gICAgQVNTRVJUKG1fb2Zm
c2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwotICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1
Y3R1cmVzKCkpOwotICAgIEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Ci0g
ICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAKLSAgICAv
LyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBh
bG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gKLSAgICAvLyB0cmFuc2l0aW9ucyB0
byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1
cmUgUy4gVGhpcyBkb2Vzbid0Ci0gICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUg
YW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KLSAgICAKLSAg
ICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX29sZFN0cnVjdHVy
ZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwotICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJr
SWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojpm
aW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUo
dm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2
bS5oZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5m
aW5hbGl6ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewot
ICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFu
dDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAg
ICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBj
YXNlIFJlcGxhY2U6Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTog
IiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0
KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUcmFu
c2l0aW9uOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFRyYW5zaXRpb246ICIs
IGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKLSAgICAgICAgICAg
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0g
ICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0
ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8U2V0dGVy
OiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAg
IGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdIik7Ci0gICAgICAgIG91dC5w
cmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Ci0gICAgICAgIG91dC5wcmludCgiLCBjYWxs
ID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICBvdXQucHJpbnQoIj4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTc1YTczYTJmOGQ0YjVlNWYwYTFkZTQwOGE1ZmJiZDFjYjdhYjI1OS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1
ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua1N0YXR1czsKLQotY2xhc3MgUHV0QnlJZFZhcmlh
bnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gS2lu
ZCB7Ci0gICAgICAgIE5vdFNldCwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgVHJhbnNpdGlv
biwKLSAgICAgICAgU2V0dGVyCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudCgpCi0g
ICAgICAgIDogbV9raW5kKE5vdFNldCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0
KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIFB1dEJ5SWRW
YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLQotICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKLSAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsK
LSAgICAKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRT
dHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0
aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBs
YWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7
Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBU
cmFuc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgYm9v
bCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2Uo
KSBjb25zdDsKLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNp
Y3MgZm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQg
dGhpcyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNv
bnN0IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3Ig
dGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAg
IH0KLSAgICAKLSAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9j
YWxsTGlua1N0YXR1cy5nZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIGF0dGVtcHRUb01lcmdlKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShW
TSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLSAgICBi
b29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJl
cGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpOwotICAgIAotICAgIEtpbmQgbV9r
aW5kOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIFN0cnVjdHVyZVNldCBtX29s
ZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9Owot
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0
YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZiY2NhNjdjZjE4NmM0NmJkYTAzMzA2YmEwNDNjMDQwZmE3
Y2EwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUHV0QnlTdGF0dXMuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgor
I2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIFB1dEJ5U3RhdHVzOjphcHBlbmRWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNT
dGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCit2b2lkIFB1dEJ5U3RhdHVz
OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBWTSYgdm0gPSBw
cm9maWxlZEJsb2NrLT52bSgpOworICAgIAorICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxl
ZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKworICAg
IHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIC8vIFdlIGRvIG5v
IGhhdmUgYSBjb2RlIHJldHJpZXZpbmcgTExJbnQgaW5mb3JtYXRpb24gZm9yIGBvcF9wdXRfcHJp
dmF0ZV9uYW1lYC4KKyAgICAgICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlz
IGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCisgICAgICAgIC8v
IElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KKyAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IH0KKworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllciA9ICYocHJvZmlsZWRCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IGlkZW50aWZpZXItPmltcGwoKTsKKworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0
YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIXN0cnVjdHVyZUlEKQorICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwor
CisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVy
ZUlEOworICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBs
YWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1
cmVJRCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7CisgICAgICAgIGNvbmRpdGlv
blNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihudWxscHRy
LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworfQorCisj
aWYgRU5BQkxFKEpJVCkKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
IGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9m
aWxlZEJsb2NrLT5tX2xvY2spOworICAgIAorICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2Nr
KTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgaWYgKGRpZEV4aXQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvOworICAgIFB1dEJ5U3RhdHVzIHJlc3Vs
dCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBz
dHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAg
IAorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIFVOVVNFRF9Q
QVJBTShtYXApOworICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FsbEV4aXRTaXRlRGF0YSk7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OworI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVC
bG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCit7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAg
ICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywKKyAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFy
eSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJ
bmZvKTsKKyAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKHN1bW1hcnkpOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSgpKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0K
KyAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIp
LCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5
bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAg
ICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAg
ICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpSZXBsYWNlOiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBh
Y2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAg
ICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmll
cigpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAg
IGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRlbnRpZmll
cigpLCBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVy
OiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0
dXJlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1
cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1
cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1
czo6SW5saW5lYWJsZTogeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
a2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
PigpLmNhbGxMaW5rSW5mbygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtT
dGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0
ZURhdGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nl
c3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAg
IGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0
LnNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0
ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwg
SUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQoreworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRl
RGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRT
aXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJQ1N0YXR1c0Nv
bnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0dXMgc3RhdHVz
ID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBibGVz
cyA9IFsmXSAoY29uc3QgUHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0dXMgeworICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKKyAgICAgICAg
ICAgICAgICBQdXRCeVN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCisgICAgICAg
ICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBk
aWRFeGl0LAorICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAg
ICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybiBiYXNlbGluZVJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRF
eGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC5zbG93VmVyc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAgICAgICAgIFB1
dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1
YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKKyAgICAg
ICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQorICAgIAorICAg
IHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUlu
ZGV4LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgYm9vbCBpc0Rp
cmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQoreworICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlmIChwYXJzZUlu
ZGV4KCp1aWQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisK
KyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKCk7Cisg
ICAgCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFB1dEJ5U3RhdHVzIHJl
c3VsdDsKKyAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc2V0W2ldOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5v
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRy
aWJ1dGVzKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAg
ICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0
UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQorICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVh
bnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5l
ZWQgdG8gdGFrZSAKKyAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24u
CisgICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKwor
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29y
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdh
dGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRX
YXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVw
bGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMg
ZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hw
b2ludCBzZXQuCisgICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBw
cm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAg
ICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhl
IHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBK
SVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8g
aGF2ZSBhIGxhenkgdGhpbmd5LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUg
dGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQ
dXRCeVZhcmlhbnQgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBz
dHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ug
Y2FuIGhhdmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBp
dAorICAgICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBi
ZWNhdXNlIGl0IG1lYW5zIHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBu
b3QgaW5zdGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBz
bG93IHBhdGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAg
ICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNp
cyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQg
dGhpcyBpcyByZWFsbHkKKyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0
eSBjaGVja3MuCisgICAgCisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBv
biBkaWN0aW9uYXJpZXMuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAg
IC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3Qg
YW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQg
dG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBB
U1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwor
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgfQorICAgIAorICAg
ICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUg
dGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCisgICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7
CisgICAgICAgIGlmICghdHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CisgICAgCisgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0
QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgaWYgKCFkaWRBcHBlbmQpCisgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAg
IHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwor
Ym9vbCBQdXRCeVN0YXR1czo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUg
PT0gTWFrZXNDYWxscykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG1fc3Rh
dGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFu
dHNbaV0ubWFrZXNDYWxscygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBmYWxzZTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OnNsb3dW
ZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8g
TWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1
dEJ5U3RhdHVzOjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xl
SWRlbnRpZmllckZvcklDU3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KQorICAgICAgICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJp
YW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVz
OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5
U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpm
aW5hbGl6ZShWTSYgdm0pCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zh
cmlhbnRzKSB7CisgICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5
U3RhdHVzOjptZXJnZShjb25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVy
Lm1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1
dG8gbWVyZ2VTbG93ID0gWyZdICgpIHsKKyAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93
UGF0aCk7CisgICAgfTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
SW5mb3JtYXRpb246CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNp
bXBsZSkKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAg
ICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1lcmdlU2xvdygpOworICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2Ug
TWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2lt
cGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3Zhcmlh
bnRzLCBzZXQpOworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykK
KyAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAg
ICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0
aW9uOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAg
ICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcCht
X3ZhcmlhbnRzKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRh
a2VzU2xvd1BhdGg6CisgICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiKE1h
a2VzQ2FsbHMpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyYTFj
NzNjOGY0MWNhMTkyZTU4ZDRiZTFkZTE2NjEzZDkwMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4
aXRGbGFnLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmll
bGRQdXRLaW5kLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1Yklu
Zm9TdW1tYXJ5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBWTTsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3Ry
dWN0dXJlQ2hhaW47CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFw
PENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aD4gU3R1YkluZm9NYXA7CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8g
SXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9y
bWF0aW9uLAorICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21l
IGtpbmQuCisgICAgICAgIFNpbXBsZSwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0
YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBr
bm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscwor
ICAgIH07CisgICAgCisgICAgUHV0QnlTdGF0dXMoKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZv
cm1hdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0
YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8
fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRC
eVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
c3VtbWFyeSkgeworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoK
KyAgICAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgorICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1Bh
dGg7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpU
YWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0Nh
bGxzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIFB1dEJ5U3RhdHVzKGNvbnN0IFB1
dEJ5VmFyaWFudCYgdmFyaWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAgICB7Cisg
ICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBz
dGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVj
dHVyZVNldCYsIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVs
ZFB1dEtpbmQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0Nv
bnRleHRTdGFjayYsIENvZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMg
UHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2lu
KTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5v
SW5mb3JtYXRpb247IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7
IH0KKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICBQdXRCeVN0YXR1cyBzbG93VmVy
c2lvbigpIGNvbnN0OworICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwg
MT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1
dEJ5VmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2lu
ZGV4XTsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2lu
Z2xlSWRlbnRpZmllcigpIGNvbnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRv
ciYpOworICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0
IFB1dEJ5U3RhdHVzJik7CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JT
dHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRl
eCk7CisgICAgCisgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOwor
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZl
Y3RvcjxQdXRCeVZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjA3YzUzNWIzNzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuY3BwCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5
VmFyaWFudC5oIgorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZh
cmlhbnQmIG90aGVyKQorICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sK
KyAgICAqdGhpcyA9IG90aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIu
bV9raW5kOworICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAg
bV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNl
dCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7
CisgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7
CisgICAgZWxzZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lk
ZW50aWZpZXIgPSBvdGhlci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQ
dXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOwor
ICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFy
aWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRy
YW5zaXRpb247CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAg
IHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25k
aXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRl
cihDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZp
ZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5r
U3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworU3RydWN0dXJlKiBQdXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBj
b25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUg
IT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nh
cnkoKQoreworICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxh
Y2U7CisgICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZh
cmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBQdXRCeVZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBr
aW5kKCkgPT0gU2V0dGVyOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2Uo
Y29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0g
ISFvdGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICht
X2lkZW50aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBOb3RTZXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAg
ICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQo
b3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRy
YW5zaXRpb246IHsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7
CisgICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZSgqdGhpcykpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFu
c2l0aW9uOiB7CisgICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRT
dHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdl
ZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRp
b25TZXQpOworICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBTZXR0ZXI6IHsKKyAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1
cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxM
aW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlv
blNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICgh
bWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAg
ICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNl
KQoreworICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxh
Y2UubV9raW5kID09IFJlcGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1f
b2Zmc2V0KTsKKyAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBB
U1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNl
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1l
cmdpbmcgb25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRk
IGEgbmV3IGZpZWxkIHdoaWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hp
bGUgdGhlIG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24n
dAorICAgIC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRo
ZSByZXBsYWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVz
U3RvcmFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2Uu
bV9vbGRTdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1
Y3R1cmUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVG
SU5FX1ZJU0lUX0FHR1JFR0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgordm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1f
bmV3U3RydWN0dXJlKQorICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sK
KyAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9u
ZXdTdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlv
blNldC5hcmVTdGlsbExpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
Y2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCI8Iik7CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJl
bXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAg
IG91dC5wcmludCgKKyAgICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29u
dGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250
ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAi
LCAiLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgor
ICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRp
dGlvblNldCwgY29udGV4dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAi
LCBtX29mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOworICAgICAgICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5VmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5r
U3RhdHVzOworCitjbGFzcyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAg
UmVwbGFjZSwKKyAgICAgICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAg
ICAKKyAgICBQdXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAg
ICAgICA6IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkK
KyAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmll
cihXVEZNb3ZlKGlkZW50aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJp
YW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNv
bnN0IFB1dEJ5VmFyaWFudCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsK
KyAgICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRp
ZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0
KTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAg
ICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29s
ZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1
Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
IHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1
cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUo
KTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNl
IHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFu
c2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3
cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3Mg
Zm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhp
cyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0
IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVt
cGxhdGVkIGhlbHBlcnMuCisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0K
KyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxs
TGlua1N0YXR1cy5nZXQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRF
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRv
ciYpOworICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIg
IT0gISFvdGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKG1faWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBv
dGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1
cmVTZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFu
c2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAg
ICBLaW5kIG1fa2luZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1
cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51
bGxwdHIgfTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7Cisg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcAppbmRleCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3
Li5mY2UwZjRkOGVlMTBlZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02
MiwxMCArNjIsMTAgQEAgR2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0
OwogfQogICAgIAotUHV0QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0
YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBz
dGF0dXMpCitQdXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsK
LSAgICBhdXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsK
LSAgICBQdXRCeUlkU3RhdHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBz
dGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3Rh
dHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoY29kZU9yaWdpbiwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTEwNyw2ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdn
cmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdl
dHMpCiAgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBm
b3IgKGF1dG8mIHBhaXIgOiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNl
Y29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVs
ZXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oCmluZGV4IGJkMTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0
OTgzZGJjNzY3ZDA3ZTI4MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgIkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJJbkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRT
dGF0dXNlcyB7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVz
KiBhZGRHZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsK
LSAgICBQdXRCeUlkU3RhdHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBj
b25zdCBQdXRCeUlkU3RhdHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFk
ZEluQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBE
ZWxldGVCeVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IERlbGV0ZUJ5U3RhdHVzJik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVC
cmFuZFN0YXR1cyYpOwpAQCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7
CiAgICAgCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbExpbmtTdGF0dXM+Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpw
YWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0
dXM+Pj4gcHV0czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxJbkJ5U3RhdHVzPj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzPj4+IGNoZWNrUHJpdmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZj
ZWIyM2RjM2NjMjFkMzI3ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRm
NzgxOWQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpyZXNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVC
bG9jayogYwogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJl
c2V0R2V0QnkoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5
SUQoY29kZUJsb2NrLCAqdGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0
UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJs
b2NrLCAqdGhpcywgSW5CeUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEy
OGU2ZTI1MDFhYWIxOGU1NWQ0MWE0Li5lMjI1NDBjMDliYzc4M2U3ZDhlMDZkNTNiN2NhODA4NzFl
ZTY3MjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaApAQCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBp
bnQ4X3QgewogICAgIEdldEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZh
bCwKLSAgICBQdXQsCisgICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAg
ICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCBk
MWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMxN2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0
NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC00Nyw3ICs0
Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJNYXRo
Q29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBP
YmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJT
dHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAgICAgICAg
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwor
ICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRC
eU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAg
aWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2lu
YWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJl
KCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFw
cGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVhbGx5IGEgcmVwbGFjZS4KICAgICAgICAg
ICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmlu
ZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wg
aXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQ
dXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBhdXRvIHByaXZhdGVGaWVsZFB1dEtpbmQg
PSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1
dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKTsKLSAgICAgICAgICAgIFB1dEJ5
SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAg
IFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAg
ICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAgICAgIGlzRGly
ZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICAgICAgYm9vbCBhbGxHb29kID0g
dHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAg
ICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaENvbmRp
dGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9
IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1
Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJl
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9p
ZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOiB7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQotICAgICAgICAgICAgbm9kZS0+
cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQo
KSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1
Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQyMGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTcz
Yi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUzODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUs
NyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRC
dXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA2M2U2OGQwMzdmZTExMTAxYWU0
MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi43ZjQwMmU2OTdmOWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRm
MjIzNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
Ci0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAi
UHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgog
I2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNp
bmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgYm9v
bCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgY2hlY2tQcmVz
ZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0gICAgLy8gV29ya3Mgd2l0aCBib3Ro
IEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5SWRWYXJpYW50LgorICAg
IC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQ
dXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFudFR5cGU+CiAgICAgTm9k
ZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiwgTm9kZSogdmFsdWUp
OworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0
IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC0yNTMsMTMg
KzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2
YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5
SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVl
LCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKKyAgICAg
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQ
dXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlKTsKICAgICB2b2lkIGhhbmRsZVB1
dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKKyAg
ICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwKICAgICAgICAgYm9vbCBp
c0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlKTsKIAogICAgIHZv
aWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29u
c3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAgICAgICBOb2RlKiBi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2Rl
KiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAg
IHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0
aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUpOwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2Ug
bm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4g
dGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24gdGhlIHByb3RvdHlwZSAoaXQgd291
bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlvdXNseSByYXJlIGlmIHRoZXkgZGlkbid0
KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVjdHVyZVNldCgpIGhhdmluZwotICAg
ICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJl
IHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsu
CisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdh
eXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdv
cmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFu
IE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZlciwgdGhpcyB3aWxsCiAgICAgICAgICAg
ICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEg
aHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwogfQogCi1Ob2RlKiBC
eXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgIFJFTEVBU0VfQVNT
RVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVj
a1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
cl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwogICAgIHJldHVybiBo
YW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1
ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
QnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlCiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAotICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFsdWUs
IGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQogICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5
SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFs
dWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFwaChwdXRCeUlkU3RhdHVzLm1ha2VzQ2Fs
bHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVz
Lm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVy
KSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNv
ZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5
U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0
SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1Np
bXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFj
Y2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisg
ICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50
cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0
QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsK
LSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygp
ID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0
YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEp
IHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1h
a2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4g
T3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKLSAgICAg
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVz
LCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFy
aWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgp
KSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpOyB2
YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1c1t2YXJp
YW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlTdGF0dXMubnVtVmFyaWFudHMo
KTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5U3RhdHVzW3Zh
cmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeUlk
U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBp
c0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgICAgIGlmICghY2hlY2socHV0QnlTdGF0
dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVj
dCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCArNTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5s
aW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMs
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3Rh
dHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0
aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlP
ZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwot
ICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAg
ICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFw
aChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0
YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAg
ICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAg
ICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVw
bGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgc3RvcmUo
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5M
SUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7Ci0gICAgICAgIGFk
ZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkg
ewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5
SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTEzNSwxMiArNTEzNCwxMiBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpTZXR0ZXI6IHsKLSAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwg
cHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7
CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBs
b2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQpOwogICAg
ICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVmYXVsdDogewotICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVj
bWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfSB9
CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1
dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAg
ICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8
fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxp
bmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICgh
cHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAh
T3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVz
LmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAg
IGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5m
byhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0g
ICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2Vz
Q2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygp
CiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygp
Ci0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgfHwg
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVO
YW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCks
IGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTIxMSwy
OSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogICAg
IAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9y
aWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwog
ICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJ
ZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0
YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZh
cmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmll
ck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRC
eU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsK
LSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07Cisg
ICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2
YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7CisgICAgY2FzZSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNE
ZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwog
ICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQw
ICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAg
ICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSBmYWxzZTsKIAotICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVP
cmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxl
ZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgotICAgICAgICAg
ICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uIEZvciBgcHV0
X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29tZSBpbmZvIGZyb20KLSAgICAgICAgICAg
ICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hlZCBjZWxsIHRoYXQgd2UgY291bGQgdXNl
IGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjc3OQotICAgICAgICAgICAgICAgIGlm
IChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8K
LSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkg
ewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwot
ICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAg
ICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAs
IG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVu
dGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmll
ci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNTeW1i
b2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lz
Q29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lk
ZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVp
ZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAg
bG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQp
OworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgYnl0ZWNvZGUubV9wdXRL
aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRy
eUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVO
YW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5mbyhieXRlY29kZS5tX3B1dEtpbmQp
LCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAg
ICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAot
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxp
bmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmln
aW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1
aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0
T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKKyAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywg
dWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRP
cGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAgfQogCkBAIC03OTc5LDEzICs3OTY4
LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXM7Cisg
ICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwogICAgICAgICAgICAgICAgIGlmICh1
aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQotICAgICAgICAgICAg
ICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisg
ICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpS
ZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXpl
KCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5m
byhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQo
Ynl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg4MTks
NDUgKzg4MDgsMjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNv
ZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGUKICAgICBOb2RlKiB2YWx1ZSA9
IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICBib29sIGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5
SWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
cjsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVz
OwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29k
ZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBub3QgY29tcGlsZWQg
aW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4KLSAgICAgICAgICAg
IC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAg
ICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAg
ICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
Y29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBi
eVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2Vs
bCgpKTsKKyAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAg
ICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisKKyAgICAgICAgUHV0QnlTdGF0dXMg
c3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0
YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3Vy
ZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRp
Zmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2Vs
bCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlk
KSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1dEJ5
SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAg
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBjdXJyZW50Q29kZU9yaWdpbigp
LCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIs
IHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1v
ZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1
cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQog
CiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAppbmRleCA5MTY0NzBkMTdkNTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3
OTU4YjRhLi42ZjIwNGQyYzVkZTBhNjEyZjczMWM5NTdiNDYxZGNmMzBjNGExMWEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtNTY5LDcgKzU2OSw3IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5j
dG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFy
Z3VtZW50czoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAKaW5kZXggODZhM2QwNzY2NGQ3ZmE5Mjc1MTI5OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNl
OWZmMGViNWRhNTEwZWMyMzQwNjQ2MmE3MWU4ODA5NTA5NjIyZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgx
LDcgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAppbmRleCBlYWVhZjg1ZWEyNTQx
NzI1NzU1ZjQ4Y2VmZGVkZTAzYjgxYzlmYTJhLi5iODgyNWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFk
OTMyNGE0MGMxNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAKIAogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmlj
RmlsdGVyKFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5jb250YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTUxMywxMSAr
NTEzLDkgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uCiAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeVZh
cmlhbnQ6OnJlcGxhY2UodmFyaWFudC5pZGVudGlmaWVyKCksIHZhcmlhbnQub2xkU3RydWN0dXJl
KCksIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMjEz
LDcgKzEyMTEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFn
ZSwgY2hpbGRFZGdlKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1
ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2Rl
KiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKICAgICB7CiAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9
IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTIyNCw3ICsxMjIyLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBudWxscHRy
OwotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5h
ZGQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICB9CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsK
ICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAKLSAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgIGlmIChkaWRBbGxvY2F0ZVN0b3JhZ2UpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBT
cGVjTm9uZSwgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSwKQEAgLTE0MDYsMTAgKzE0MDQs
MTAgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICBpZiAoIWJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50
aWMpLAogICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCks
Ci0gICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkudWlkKCksCisgICAgICAg
ICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICBpc0RpcmVjdCwg
cHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkK
QEAgLTE0MjQsOCArMTQyMiw4IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKIAogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAg
ICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKLSAgICAgICAgZm9yIChjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7Ci0gICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAg
ICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OCw3ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSB8fCBwcml2YXRl
RmllbGRQdXRLaW5kLmlzU2V0KCkpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERv
bid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhp
cy4KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlJZFN0YXR1cywgbm9kZS0+b3JpZ2luLAot
ICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCisgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeVN0YXR1cywgbm9kZS0+b3JpZ2lu
LAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeVN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAogICAgICAgICAg
ICAgRWRnZShiYXNlTm9kZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2Mz
N2UxOGYxZS4uZTY0ODE2N2MxMTg2YmM4YzkzZjMyZThjNTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0
dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJE
ZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0
ZTlhNWNmMmQ1NmM2NDgzZDIyYWJiYTY2NzJhYzczODUwOS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFj
NTI0OTE1M2Y5ODZlMzk4YTI2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCkBAIC0yODY1LDcgKzI4NjUsNyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0
NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzLi4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYw
YTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApA
QCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5
U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7
Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0
dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAg
ICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRhZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50
b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmEx
Y2E5OGJkMjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0y
NTIsNiArMjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1
ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdj
ZGE5YTkyLi4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDEx
IEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1f
cHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihn
ZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQ
dXRCeVZhbEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAg
eworICAgICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5
VmFsR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxC
eUlkKGNvbnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNs
b3dQYXRoKQogICAgIHsKICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFw
cGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUs
NyBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3Rv
cjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9n
ZXRCeUlkc1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlW
YWxHZW5lcmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2Rl
bEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0
b3I+LCA0PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVElu
QnlJZEdlbmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRk
MGYuLjJiZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRN
b2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0
ZSkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEu
LjdjYWEyMDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2
YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRl
ICJQdXRCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAj
aW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAg
LTkyLDcgKzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRp
UHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZl
Y3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFu
dCwgMj4gdmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7
CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAs
MTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1
cyo+KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9v
bCBoYXNQdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsK
ICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0
QnlTdGF0dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlk
U3RhdHVzKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7
CisgICAgICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvLmFzPFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3Rh
dHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2Zl
OGExYWMzNzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcy
MjRlZGJlZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCkBAIC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oRmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJJbkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0
QnlJZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3Rh
dHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFu
ZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2Vj
MzhjYzA1YTQxNmVhYmViYjllMjIyMzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEw
MjhjYmEwY2JlZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2Rl
QmxvY2sqIGJhc2VsaW5lQ28KIAogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAg
ICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQg
YW5kIGlubGluZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1Yklu
Zm8gZm9yIHRoaXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwg
aXQgaXMgcG9zc2libGUgdGhhdCB3ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJl
LiBMZXQncyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAg
IC8vIDEuIEJhc2VsaW5lIENvZGVCbG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAg
ICAgLy8gMi4gKEEpIGdldHMgREZHIChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAo
QSkgY29sbGVjdHMgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdl
dCBTdHJ1Y3R1cmVTdHViSW5mbyBmcm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNl
dHRlciBjYWxsLgotICAgICAgICAgICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJv
eWVkIHNpbmNlIGl0IGlzIG5vdCBleGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0g
ICAgICAgICAgICAgICAgLy8gNS4gVGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1Ig
ZXhpdC4gU28gKEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5l
IENvZGVCbG9jayBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhp
dC4gKEIpIGF0dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZv
ciBQdXRCeUlkIChvcmlnaW5hbGx5LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0
IHNpbmNlIChBKSdzIEpJVERhdGEgaXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZh
bEluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5
VmFsSW5mby0+ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZv
KENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvKTsKICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxv
Y2F0aW9uLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNw
cAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMx
OGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBU
aG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBU
aGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQs
IHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdo
dCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJl
IHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJl
bnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRP
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFy
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNl
dC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBj
dXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4u
ODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0
OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZj
YTJjZjE0ZTJkNmI1ZDk5M2ViNmIuLjYwM2ZmN2IyZTUyZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3
ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5
ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODllODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
QEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkw
ODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNk
ZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0Ogog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2go
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEz
NDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFj
ZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNz
IFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBj
YXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgy
YzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNh
MDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA1YTNlOThmNzUzNzAxZDNiMzRm
ODRiOTgwODNkMjRkYWU4ZWY3MTAwLi5jMzlmMmRkZjM3NTM2MzFiMTUyODUxMWFiYzkwZTcxYTUw
YTMwN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtODk1MSw3ICs4OTUxLDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwog
ICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5
VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJh
c2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs4OTY2LDE2IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwog
CiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZs
eSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
biwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlh
bnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygp
LmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9y
aWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3Jl
UHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5v
ZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8o
KS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygp
LmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRT
dHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2
OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53
cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmls
ZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAi
T3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1
dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5
SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRl
ZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1h
Y3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXpl
KSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0
T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3Jv
KFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBc
Ci0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3ND
YXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRC
eVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxC
eVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBc
CiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZh
NDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0
QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5k
ZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0
QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dl
dEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVm
ZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7
CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDY0NDBmZjI0MTBmMDM3MmQxYjVmYjdmMDU3N2ZkNzBmNDllMjA1NTguLjI2YWZm
ZGE1N2M0MDk1YjQ5MWFiYjU0MWYyNjI3YjFiZjBhNjFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVm
Zm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5k
ZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAg
IGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQs
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRl
eCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1
dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21w
aWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0
QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
V2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hl
YWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRl
TmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyKTsKIApAQCAtMzg0LDM2ICszNTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBS
ZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1p
dEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CiAgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKik7Ci0gICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCi0gICAgICAg
IC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50
LWNoZWNrZWQgYW5kCi0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVj
a2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAgICAgICAgLy8gcmV0dXJucyB0
aGUgc2xvdyBjYXNlcy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1
bXBMaXN0IGVtaXRJbnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8sIEludDMyU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJh
ZFR5cGUsIGJ5VmFsSW5mbywgRG91YmxlU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFs
KE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1
dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICB9Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRp
Z3VvdXNQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5
VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlU
eXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlW
YWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0xMDY0LDYgKzEwMDgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dl
dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9n
ZXRCeUlkc1dpdGhUaGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9w
dXRCeUlkczsKKyAgICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFs
czsKICAgICAgICAgVmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAg
ICBWZWN0b3I8SklUSW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9y
PEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0xMDkxLDYgKzEwMzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9N
QVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFY
IH07CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAg
ICAgdW5zaWduZWQgbV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWdu
ZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZh
bEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsg
VUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBj
Njc2Yzg4Y2Y2NC4uYTkwYzg2OWQzOTc5OTc2YzZmZmE2ZWRkMjNmYzMyNjM0NDJmNTlmMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRC
eUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVn
IHNjcmF0Y2gsIAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAg
ICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHVi
SW5mb0dQUikKKyAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2Rl
KQogICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw2NyBAQCB2
b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwg
TGlua0J1ZmZlciYgc2xvd1BhdGgpCiAgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1f
c3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0
b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGpp
dFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2lu
ZCkKKyAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9k
ZSkKKyAgICAsIG1fcHV0S2luZChwdXRLaW5kKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBt
X3ZhbHVlKHZhbHVlKQoreworICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOworCisgICAgbV9zdHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOwor
ICAgIG1fc3R1YkluZm8tPnJlZ3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7
CisgICAgbV9zdHViSW5mby0+dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiA9IHN0dWJJbmZvR1BSOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgbV9zdHViSW5mby0+YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9z
dHViSW5mby0+dmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52
LnByb3BlcnR5VGFnR1BSID0gcHJvcGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBK
SVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0
KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxl
SnVtcCgpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xv
d1BhdGgpCit7CisgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0
aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQ
dHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0
aW9uX0dTc2lKSkMgSklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQorewor
ICAgIHN3aXRjaCAobV9wdXRLaW5kKSB7CisgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgIGlmIChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBN
YWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJS
ZWcgc3R1YkluZm9HUFIpCiAgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdp
biwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRl
eCBlZTY4MTQxMDFhODFlYmQxNTViZjRkYjY5M2ZmNDdjOGEyNzhmN2ZiLi4zMDViNzBkM2Y5MmIx
ZmUzYjVhNjY3ZGIzMzQ0YmI2NjdkNmZiNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAg
Y2xhc3MgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRH
ZW5lcmF0b3IgewogCiBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJ
VEJ5SWRHZW5lcmF0b3IgewogcHVibGljOgotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAg
ICAgICA6IG1fZWNtYU1vZGUoRUNNQU1vZGU6OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAog
ICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNW
YWx1ZVJlZ3MgYmFzZSwKQEAgLTE0MiwxMCArMTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRp
b25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUg
bV9lY21hTW9kZTsKKyAgICBFQ01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgp
IH07CiAgICAgUHV0S2luZCBtX3B1dEtpbmQ7CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcg
QmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAg
ICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vz
c1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93
UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAu
bV9qdW1wOworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhM
aW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisKKyAgICBWX0pJVE9wZXJhdGlvbl9H
U3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKKworcHJpdmF0ZToKKyAgICBFQ01BTW9kZSBtX2Vj
bWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CisgICAgUHV0S2luZCBtX3B1dEtpbmQ7CisK
KyAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CisgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKKworICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOworfTsKKwogY2xhc3MgSklURGVsQnlWYWxHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogICAgIHVzaW5nIEJh
c2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggNzc0NGI1MDgzN2FlYTdiYTA4NWEwMTM0NWZiYmYyYjY4
YmYwZDQyNS4uNzdhZjViMTMzZjQ1ZmIxMWQ0MDViMzY5OTJiZTBjNzI4MDY0YTAzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTM2NCwyNCArMzY0LDYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmkKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVBy
b2ZpbGUtPmFkZHJlc3NPZk91dE9mQm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2Rl
IEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRv
IGFycmF5UHJvZmlsZVNhdyA9IFtdIChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlw
ZSBjYXBhYmlsaXR5KSB7Ci0gICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5n
VHlwZWRBcnJheXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5
TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwot
ICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAg
ICByZXR1cm4gSklURG91YmxlOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2Rlcywg
SW50MzJTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9m
aWxlU2F3KGFycmF5TW9kZXMsIEFycmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJ
VEFycmF5U3RvcmFnZTsKLSAgICByZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVl
ZGY4NzE1ODM4ZDc3NWJlY2M3MWY4MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIw
NjEwMGExNWRhOTcxOWEyOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnko
dm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1
dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJl
cGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpO
b3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRp
ZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0
Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3RE
aXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRp
ZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRp
Zmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNo
UHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRl
bnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVj
dCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlm
aWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJ
RChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04
ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VO
VVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNh
Y2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAg
ICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3Qs
IG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIs
IHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFj
Y2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUp
KTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxv
Y2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJ
RChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVu
dGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNl
dCk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQ
dXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlW
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwg
RUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgp
KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWlu
dDMyX3QgaSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAg
ICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0
Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2Zp
bGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAg
ICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5w
dXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJp
Y3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMg
dm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VW
YWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0
KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0
LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
ICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8t
PmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhj
ZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBp
ZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVh
YmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgp
ICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxP
YmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2Ny
aXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkg
ewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQz
Ml90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5p
bmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRP
dXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAg
ICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3Qs
IGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0
SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNo
ZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwg
YnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBD
b21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNl
T2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBA
IGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0
aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
SlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUq
IHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAg
T3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFs
dWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5k
ZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7
Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlm
IChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0
dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0g
aml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0
QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8t
PmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29k
ZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNl
T2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRl
KGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2
bSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0s
IGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7
CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElm
IHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2Vw
dHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAg
ICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1p
emVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAg
ICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9
CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJD
ZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vi
c2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAg
ICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENv
bnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAg
IGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXko
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkg
fHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxG
cmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbElu
Zm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQo
KSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwot
ICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAg
ICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAg
ICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNl
ZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJl
QmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1
dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAm
JiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewot
ICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91
dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQg
bWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0
aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBv
ZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRf
YnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVu
IGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZh
bEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0
aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFN
b2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUg
ZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsK
ICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0
KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9w
dGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJl
c3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgot
ICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1p
emUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQog
Ci1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSog
cHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6
aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6
ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0g
ICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4
KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmpl
Y3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRl
eGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgot
ICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVj
dHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXRE
aXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsK
KyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1
YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYg
KHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUp
OwotCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2
bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAg
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAg
ICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2Ug
aGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3Qg
ZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZt
KS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNo
ZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsK
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAh
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09
IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2
ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vl
bk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4
dCgpKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0
aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAg
ICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwg
YmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nl
c3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNj
cmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGlu
Z0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAg
ICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVj
dHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRL
aW5kOjpEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXpl
ZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkg
ewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0
aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRo
YXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJj
ZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0
aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBn
ZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBl
dmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKyti
eVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3Qs
IHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0
aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVj
dCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1p
emF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAg
ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFN
b2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBF
Q01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFs
T2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUp
OworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxl
LCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUq
IHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAor
CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1
ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChn
bG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1v
ZGU6OnNsb3BweSgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5p
c09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJh
c2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAg
c3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUs
IEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChi
YXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVl
KSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAog
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAppbmRleCAyNTg0ZTk5NWU0NjZkZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3
MzU0MmZjM2Y0YmU4M2UwNmJlMDYyNTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2
YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQ
dXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVO
YW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2Rl
KSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmls
ZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5j
b2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVy
blR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXgg
NTY2OGRmYmU0MWQxMmE5MjI0YTQzYzA4ODEzNGUzY2M1Yzg0Y2M3ZS4uMDBlNzY4NDc5ZDcwNTIx
ZTNlZTIzZWM0ZjU4YTYyZDA0NDRkNGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCwxNzcgKzQzOCwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0g
Ynl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVf
djxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7
CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5
dGVjb2RlSW5kZXgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0
YW50SW50KHByb3BlcnR5KTsKLSAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQp
Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJl
Z1QxKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdElu
ZGV4OwotICAgIGlmICghcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFy
SnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1w
SWZOb3RJbnQocmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIFNlZSBjb21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAg
IHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwotICAgIH0KICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKIAotICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhN
RTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAo
bW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQz
MlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5
VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMyksIHJlZ1QyLCBlY21h
TW9kZSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
bm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1
b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5
cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7
Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5
cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3Jy
ZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGlu
Z1NoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gz
MihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0KLSAgICAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QyKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAg
IGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJlZ1QzKSk7Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTog
ewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOwotICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGQ2NChu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDMpOwotICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMywg
ZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkp
OwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1Qw
LCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmU2NChyZWdUMywg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOwotICAgIAotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1Qz
KTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsK
LSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFs
SW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAgICAgICAgIGZh
ckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhp
cyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAgSnVtcCBl
bXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJl
c3VsdCh0aGlzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0g
ICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNv
ZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5kID0ganVt
cCgpOwotICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkp
KTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0gICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDEpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwor
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVu
ZC5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNl
bGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTY2MSwxMiArNTE1LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAg
ICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAg
IGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTY3
NCwxNiArNTMxLDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAg
ICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9w
dXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyLCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMywgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNjk0LDI4ICs1NDksMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFN
b2RlR1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBh
cmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjU7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVBSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJ
bmZvKSwgYnlWYWxJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1
ZSgpKSwgZWNtYU1vZGVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQogICAgIENhbGwg
Y2FsbDsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
OworICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwog
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoaXNEaXJlY3QgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CisgICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0
ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXgrKzsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC03MzYsMTggKzU4OSwxOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3Vt
ZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIy
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1
bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0
QnlWYWxPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZh
bHVlUFIsIGJ5VmFsSW5mb0dQUiwgZWNtYU1vZGVHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0
R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxl
R1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1w
KEFkZHJlc3MoYXJndW1lbnRHUFI0LCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVu
dEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJh
dGlvblB0clRhZyk7CiAgICAgZWxzZQogICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgwOSwxMyAr
NjYyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVu
dEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihwdXRLaW5kLnZhbHVlKCkpLCBwdXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKQEAgLTg1MSwxNCArNzA0LDE0IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1l
bnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRL
aW5kR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VH
UFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGlt
aXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5
VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKIAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpA
QCAtMzI5MCw4MiArMzE0Myw2IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2so
UmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNo
YWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5l
ZWRzTGlua0ZvcldyaXRlQmFycmllciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKLSAgICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRC
eVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENv
bnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJp
ZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRU
eXBlLCBudWxscHRyKTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlm
IChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWlu
dDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAv
IEJpZ1VpbnQ2NEFycmF5IG5ldmVyIGNvbWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NF
UlQoaXNGbG9hdCh0eXBlKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBl
ZEFycmF5UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlw
ZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
ZG9uZSwgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVC
YXJyaWVyKSB7Ci0gICAgICAgIEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFz
dCgpLmNhbGxlZS5leGVjdXRhYmxlQWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9m
YXJDYWxscy5sYXN0KCkuZnJvbSwgbV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAg
ICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRW
YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2Vs
aW5lIHB1dF9ieV92YWxfZGlyZWN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgp
KTsKLSAgICB9Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNE
aXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZh
bEdlbmVyaWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hK
dW1wKGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJu
QWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+
KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
YykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFu
b3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlz
dCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBs
YXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5
TW9kZSk7Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsRGlyZWN0Pihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQ
cml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0z
NDA3LDIyMyArMzE4NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1l
V2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BCiAgICAgfQogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2Rl
SUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERp
cmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwotICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsK
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9
IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2luZCwgcHJvcGVydHlOYW1l
LCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAg
IGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAg
IGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX25lYXJDYWxscykgewotICAgICAgICBpZiAo
Y2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5m
cm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxT
aXRlIDogbV9mYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwot
ICAgIH0KLSAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVyKTsKLQotICAg
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0
KSA/ICJfZGlyZWN0IiA6ICIiLCBwcm9wZXJ0eU5hbWUudWlkKCktPnV0ZjgoKS5kYXRhKCksIHRv
Q1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVl
KCkpOwotICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gcHV0S2luZCA9PSBQdXRLaW5kOjpE
aXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZh
bEdlbmVyaWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hK
dW1wKGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVy
bkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFn
PihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9u
bHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMu
Y3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25z
IGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZDxPcFB1dEJ5VmFsPihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KEJ5VmFsSW5mbyosIFJl
dHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgVHlwZWRBcnJheVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklE
IHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsK
LSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0g
ICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3Jh
dGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJl
Z2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsK
LSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNj
cmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAg
ICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBU
YXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBl
LmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9y
VHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAg
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
ZWFybHlTY3JhdGNoKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIoZWFy
bHlTY3JhdGNoKSk7Ci0jZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFy
bHlTY3JhdGNoKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGF0ZVNj
cmF0Y2gpKTsKLSNlbmRpZgotICAgIAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBp
bnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBw
YXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0
Y2gpOwotICAgIGNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
bGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0g
ICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlw
ZSkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVy
VGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4b3IzMihl
YXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAo
KTsKLSAgICAgICAgdG9vQmlnLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDB4ZmYpLCBlYXJseVNjcmF0Y2gpOwotICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gs
IEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRl
eChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgNDoKLSAgICAgICAgc3RvcmUzMihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2Ny
YXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNGbG9h
dCh0eXBlKSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7
Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlT
Y3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAg
IFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQg
YmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdp
c3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gg
PSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0g
ICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0KLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBp
ZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gz
MihFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBl
KHR5cGUpKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZv
LT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAg
ICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVz
dGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBU
cnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBsb2FkMzIo
QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVT
Y3JhdGNoMik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwg
bGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2Fz
ZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJh
bmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVh
cmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3Vi
bGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJl
cihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgZWFybHlTY3Jh
dGNoKTsKLSAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIHJl
YWR5LmxpbmsodGhpcyk7Ci0jZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwg
ZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGxh
dGVTY3JhdGNoKTsKLSAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVn
VDApOwotICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFy
bHlTY3JhdGNoLCBsYXRlU2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsK
LSNlbmRpZgotICAgIAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2Ug
YXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVj
dHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAg
IGNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0
Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgc3dpdGNo
IChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgNDoKLSAgICAgICAgY29udmVydERvdWJs
ZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwg
QmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4
KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xv
d0Nhc2VzOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAppbmRleCBiOThiZmVjZWRhYTU1NjAxZjk1YTg4YmVkYTYxYjA5ZjFhMzQzNDcxLi5m
YmUxYTAzN2YyOWQyYzNmOGRiM2FkYTkyMTljYWE1Zjg3MWI2M2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ2
NiwxNTAgKzQ2NiwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwor
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5k
IHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3RE
aXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAorCiAgICAgZW1pdExv
YWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgCisg
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKLSAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7CiAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgcHJvZmlsZSk7Ci0gICAgCi0gICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1F
OiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEpOwotICAgIAotICAg
IEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1
dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlT
dG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
ZG9uZSkpOwotfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLQotICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0g
cGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29udGlndW91
c1NoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0Y2ggKGluZGV4aW5n
U2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAg
IHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMy
KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9hZChiYXNlLCByZWdU
MiwgcmVnVDMpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAg
ICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsKLSAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0g
anVtcCgpOwotICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgbW92ZUludHNUb0Rv
dWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAgICAg
c3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
Ci0gICAgCi0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QyLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhz
dG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIAotICAg
IHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNF
RF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwg
QWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAg
ICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCks
IEludmFsaWRHUFJSZWcsIGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBt
X3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVh
bCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9y
ZVJlc3VsdCh0aGlzKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBz
dG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7IC8vIHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVn
VDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8gdGFnCi0gICAgSnVtcCBl
bmQgPSBqdW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0
LCB0aGlzKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7
Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAot
ICAgIGVuZC5saW5rKHRoaXMpOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTYxOSwxMiArNDk2LDE1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVD
TUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwog
CiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklU
OjplY21hTW9kZShieXRlY29kZSk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02MzIsMjEgKzUxMiwy
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5i
eVZhbEluZm87Ci0gICAgCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlW
YWxzW21fcHV0QnlWYWxJbmRleCsrXTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAorCisgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0aW9uIGJlbG93IGlz
IGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgogICAgIC8vIFN3YXBw
aW5nIHNob3VsZG4ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgotICAgIGVtaXRMb2FkKGJh
c2UsIHJlZ1QyLCByZWdUMSk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMCk7
CisgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdU
MCk7CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2Rl
LnZhbHVlKCkpKTsKIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0g
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAppbmRleCAzN2E4MGIyOTU3NzIxMGYzNWUwNmQ4MWJhMTM0NWY2OTc4
MDA5NjQ0Li40YjcxYTBmYTlmZDk5MDMxM2NhNGFiNzlkMTk0M2Y4YzgxZDdmMjRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTU2OCw1MyArNTY4LDk0IEBAIHZvaWQg
cmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTCiAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0KIAotc3RhdGljIGF1dG8g
YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdCkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5
S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQp
IHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0Owot
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VS
VChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2lu
ZDo6QnlWYWw6IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RN
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdEdlbmVyaWM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhh
cHB5CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotc3RhdGljIGF1dG8gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlw
ZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQogewotICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgc3dpdGNo
IChwdXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgc3dpdGNo
IChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJU
KHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KICAgICAvLyBNYWtlIHdpbiBwb3J0
IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2lu
ZCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTY4Miw4ICs3MjMsOCBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0
Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJsb2NrLCBvbGRT
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC04MTcsMTIgKzg1OCwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkQWRk
QWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSkpOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNz
Q2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSkpOwogICAgICAgICAKICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNz
Q2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgp
ID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUs
IFdURk1vdmUobmV3Q2FzZSkpOwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVwbGFjZVdpdGhK
dW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhK
dW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC5jb2RlKCkpOwogCkBAIC04MzUsMTIgKzg3NiwxMDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6
IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCkKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVQ
dXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
LSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlD
YWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBH
aXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQs
IHB1dEtpbmQpKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAg
ICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywg
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2
bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5
cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGlt
aXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAg
ICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAg
ICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJT
aGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZElu
dDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJs
ZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
RG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENv
bnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVD
TUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRl
ZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNl
V2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsK
KworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRC
eVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRL
aW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdEdlbmVyaWMpKTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVs
ZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2
LDcgKzExMjEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAg
ICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkgewogICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpJbkJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5
MSw1NSBAQCB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1
dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkKIHsKLSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBk
ZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5j
dGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25U
eXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwotICAgIEZ1bmN0aW9uVHlwZSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplKTsKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlw
ZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rp
b25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlw
ZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAg
ICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdl
bmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgfQogCiAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
byk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5k
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVh
OTRhYmQ2MzczYzBhYzM2MjlkOGU2Li5lY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3
OWM3ZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEg
QEAgZW51bSBjbGFzcyBHZXRCeUtpbmQgewogICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2Vu
dW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBj
bGFzcyBEZWxCeUtpbmQgewogICAgIEJ5SWQsCiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAg
ZW51bSBjbGFzcyBJbkJ5S2luZCB7CiAKIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNH
bG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEtpbmQpOwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENv
ZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5k
KTsKIHZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVs
ZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRj
aEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0
dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29s
IHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1YkluZm8mKTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBs
aW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChW
TSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNl
dEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQg
cmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0
UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCBy
ZXNldERlbEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZv
aWQgcmVzZXRJbkJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwog
dm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmgKaW5kZXggN2VlYTc1ODcwZTdiMTUyOTY5MTBkNWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2Iw
NzkxNGVlZDdmNjc3Nzk5MDFmYmJhMzA2YmM0NzEyYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gVGhlIGZvbGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBm
b3IgdGhlIG9wY29kZSBuYW1lcy4gVGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMg
Y29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8g
YmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlT
dGF0dXMuY3BwKQogLy8gd2hpY2ggcmVmZXJzIHRvIHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVt
IHRvIGJlIHByZWZpeGVkIHdpdGggImxsaW50XyIuCiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50
YXRpb24sIHRoZSAyIGFyZSBlcXVpdmFsZW50LiBIZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFs
aWFzIGhlcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436163</attachid>
            <date>2021-08-23 01:33:02 -0700</date>
            <delta_ts>2021-08-23 02:57:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823013301.patch</filename>
            <type>text/plain</type>
            <size>303153</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li43ODUxNDBkNWU1MTkzZTAx
NzFlNTg2ZmRkNmYwODFiZTA2NDJlODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTIgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0lD
U3RhdHVzTWFwLmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAg
ICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0
YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0
YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAg
ICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRC
eVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZh
cmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFu
dDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlND
OjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAo
SlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJp
YW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAg
ICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlW
YXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAg
ICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVj
b3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1
c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMp
OgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Rv
cmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpj
bG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0
YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRC
eU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZv
bGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICog
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJnc0Zvcndh
cmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11bHRpUHV0
QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICogaml0L0lD
U3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAg
ICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0
aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklU
X09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6ZGly
ZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXplKToKKyAgICAgICAg
KEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OnRyeVB1dEJ5VmFs
T3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQdXRCeVZhbE9wdGlt
aXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZh
bCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhD
YWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVw
YXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0
QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlND
OjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5CeSk6Cisg
ICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2gu
aDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEtMDgtMjIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1v
dmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZhN2EuLjMy
M2Q4YTQwZTFmNmUyM2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3RjAwQ0Y2
NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2
IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NjE0
Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0Q0E3REQ5
MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMz
MkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBT
dHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4NjA5MDBF
MDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJB
QkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBDMzY3QzUg
LyogVHJhY2tlZFJlZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
MDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDExIEBACiAJ
CTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyog
R2V0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0QnlTdGF0
dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHV0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
OTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAv
KiBTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0
dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeVZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0
QnlWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlGMURGNzg2
MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2Vz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVu
Y2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2OTUsMTAg
QEAKIAkJCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAq
LywKIAkJCQkwRjE1Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCAqLywK
IAkJCQkwRjE1Q0QyMTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8sCi0JCQkJ
MEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAotCQkJCTBG
OTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJMEY5M0I0
QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkwRjkzQjRB
ODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkzMzI5OTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeVZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyog
UHV0S2luZC5oICovLAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNvcmRlZFN0
YXR1c2VzLmNwcCAqLywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVjb3JkZWRT
dGF0dXNlcy5oICovLApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJFMUM4RTNF
QzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIx
OEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIz
MUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
OTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERp
cmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUy
QUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3
NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTljMzAyMGQu
LjcwNzdlZjlhZTMxMTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFtQ29kZUJs
b2NrLmNwcAogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Qcm94eWFi
bGVBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNvZGUvUHV0
QnlTdGF0dXMuY3BwCitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRl
ZFN0YXR1c2VzLmNwcAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVjb2RlL1Nl
dFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4
MGMzNWI2Li5jYTg5MGRhYzUzN2EwNmYxN2Y4MWJlNTY4NjI5YmU0MjcyYmE3OTBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5
OSwxOSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nl
c3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVy
Q2hlY2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3Ry
aW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERv
dWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYg
KzM1MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgp
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiAr
NDE3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBj
b25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3
NywyNCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRE
b3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdM
b2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91Ymxl
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsK
ICAgICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxz
KFZNJiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlw
ZSgpID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtMTE5
OSw5ICsxMzAzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAg
ICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BS
KTsKIAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2Nh
dG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZh
bHVlUmVncyk7CkBAIC0xMjI3LDE2ICsxMzI4LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091
dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5k
KGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3Bl
cnR5R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGpp
dC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQu
YnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3Zl
KHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAg
IGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRj
aDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAg
ICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAj
ZW5kaWYKQEAgLTEyNjIsMjEgKzEzNjMsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdp
dGhHdWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZC
b3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwg
c2NyYXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9h
ZCkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0g
SW52YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGlt
ZXNFaWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBq
aXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAg
ICAgICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAg
aml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikp
OwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFs
dWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BS
KSk7Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gz
R1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZF
bXB0eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIs
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzg3LDI3
MyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsK
ICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1
c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9y
ZS5saW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNh
c2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHko
KSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0
IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMy
IGNoZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJh
bmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMp
OworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAg
YWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8ucHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9z
dHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJh
eVByb2ZpbGVHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZl
ZFN0YXRlOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsK
KyAgICAgICAgYXV0byBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAg
ICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4
dHJhU3BhY2UpOworICAgICAgICB9OworCisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3Rv
cmVSZXN1bHQ7CisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
KSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFy
cmF5U3RvcmFnZVNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVy
cygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0
Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hU
ZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBw
ZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJ
bmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5k
aWYKKworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhp
bmdUeXBlIGV4cGVjdGVkU2hhcGU7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3Rl
ZFNoYXBlID0gSW50MzJTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUg
PSBEb3VibGVTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0g
Q29udGlndW91c1NoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAg
ICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7CisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAg
ICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0
b3JlOiB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAh
PSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFu
Y2hJZk5vdEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5v
dEludC5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0
LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0
Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAg
ICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3Vi
bGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIs
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAg
aml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVl
UmVncykpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6
VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAv
LyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRl
LnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VT
dG9yZSkgewogICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAg
ICAgaXNFbXB0eS5saW5rKCZqaXQpOworICAgICAgICAgICAgLy8gRklYTUU6IFByb2ZpbGUKKyAg
ICAgICAgICAgIC8vIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEp
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1
ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpCZWxvdywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0
KTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEp
LCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1
bHQsICZqaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5s
aW5rKCZqaXQpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBQcm9maWxlCisgICAgICAgICAgICAvLyBlbWl0QXJyYXlQ
cm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAh
ZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmso
JmppdCk7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRl
LmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQg
Y291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5s
b2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3Vi
bGVDYXNlID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgZG91YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyNlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92
ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCks
IHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQp
OworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNl
dCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgc2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBh
bGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3Mp
OworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAg
ICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYg
KHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAg
ICAgICBzY3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0
YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAg
ICAgICAgaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9F
eHRyYVNwYWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAg
ICAgICAgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAg
ICAgICAgICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
d09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7
CisgICAgICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
ZmYpKTsKKyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAg
ICAgY2xhbXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNP
bmUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJh
c2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAg
IEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0
LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4
OiB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4OTYsNiArMjI1NCw4IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7CkBA
IC0yMTgzLDYgKzI1NDMsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNlIENoZWNrUHJpdmF0
ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICAvLyBU
aGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJhdGVXaXRoR3VhcmQoKSwgc2luY2UgdGhl
IGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8vIGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1
cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRlKCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNp
bmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFyZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3Mu
CkBAIC0yMTk2LDIyICsyNTY5LDMxIEBAIFR5cGVkQXJyYXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlw
ZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIHN3aXRjaCAoYWNjZXNz
VHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDg7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MTY7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgog
ICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKICAgICAgICAg
cmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMjg0LDYgKzI2NjYsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJl
ZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFjY2Vzc0Nhc2UmIHJocykKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgorICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAppbmRleCA0MTljOTlj
OTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJlLi41NjNhMTU1MmFlNDIxNjQ0MDQ2ZDBh
YTQxZDIzYjZhZGQ1ZGI2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAgY2xhc3MgQWNjZXNzQ2FzZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNlPiB7CiAgICAgICAgIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwK
ICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0
cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQsCisgICAgICAgIEluZGV4ZWRJbnQz
MlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3RvcmUsCisgICAgICAgIEluZGV4ZWRDb250
aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSwKKyAgICAgICAg
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZSwKKyAg
ICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVpbnQ4X3QgewpAQCAtMzUzLDEyICszNjYs
MTMgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgIHN0cnVjdCBLZXkgewogICAg
ICAgICAgICAgS2V5KCkgPSBkZWZhdWx0OwogCi0gICAgICAgICAgICBLZXkoR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJhR1BSLCBHUFJSZWcgc3R1YkluZm9HUFIs
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIFBvbHltb3JwaGljQWNjZXNzSklUU3R1YlJvdXRp
bmUqIHdyYXBwZWQpCisgICAgICAgICAgICBLZXkoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1
ZUdQUiwgR1BSUmVnIGV4dHJhR1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBhcnJheVBy
b2ZpbGVHUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIFBvbHltb3JwaGljQWNjZXNzSklU
U3R1YlJvdXRpbmUqIHdyYXBwZWQpCiAgICAgICAgICAgICAgICAgOiBtX3dyYXBwZWQod3JhcHBl
ZCkKICAgICAgICAgICAgICAgICAsIG1fYmFzZUdQUihiYXNlR1BSKQogICAgICAgICAgICAgICAg
ICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKICAgICAgICAgICAgICAgICAsIG1fZXh0cmFHUFIoZXh0
cmFHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3N0dWJJbmZvR1BSKHN0dWJJbmZvR1BSKQorICAg
ICAgICAgICAgICAgICwgbV9hcnJheVByb2ZpbGVHUFIoYXJyYXlQcm9maWxlR1BSKQogICAgICAg
ICAgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCiAgICAgICAgICAgICB7
IH0KIApAQCAtMzc1LDYgKzM4OSw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAg
ICAgICAgICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0gYi5tX3ZhbHVlR1BSCiAgICAgICAgICAg
ICAgICAgICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1fZXh0cmFHUFIKICAgICAgICAgICAgICAg
ICAgICAgJiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9zdHViSW5mb0dQUgorICAgICAgICAgICAg
ICAgICAgICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09IGIubV9hcnJheVByb2ZpbGVHUFIKICAg
ICAgICAgICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdpc3RlcnMgPT0gYi5tX3VzZWRSZWdpc3Rl
cnM7CiAgICAgICAgICAgICB9CiAKQEAgLTM4Myw2ICszOTgsNyBAQCBjbGFzcyBTaGFyZWRKSVRT
dHViU2V0IHsKICAgICAgICAgICAgIEdQUlJlZyBtX3ZhbHVlR1BSOwogICAgICAgICAgICAgR1BS
UmVnIG1fZXh0cmFHUFI7CiAgICAgICAgICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUjsKKyAgICAg
ICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IG1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgfTsKIApAQCAtNDE2LDYgKzQzMiw3IEBAIGNsYXNz
IFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdmFsdWVHUFIg
PT0gYi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9leHRyYUdQUiA9PSBi
Lm1fZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3N0dWJJbmZvR1BSID09IGIu
bV9zdHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAgICAmJiBhLm1fYXJyYXlQcm9maWxlR1BS
ID09IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3VzZWRS
ZWdpc3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFRoZSBvcmRlcmluZyBvZiBjYXNlcyBkb2VzIG5vdCBtYXR0ZXIgZm9yIHNoYXJpbmcg
Y2FwYWJpbGl0aWVzLgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcG90ZW50aWFsbHkg
aW5jcmVhc2Ugc3VjY2VzcyByYXRlIGJ5IG1ha2luZyB0aGlzIGNvbXBhcmlzb24gLyBoYXNoaW5n
IG5vbiBvcmRlcmluZyBzZW5zaXRpdmUuCkBAIC00NDUsNiArNDYyLDcgQEAgY2xhc3MgU2hhcmVk
SklUU3R1YlNldCB7CiAgICAgICAgIEdQUlJlZyBtX3ZhbHVlR1BSOwogICAgICAgICBHUFJSZWcg
bV9leHRyYUdQUjsKICAgICAgICAgR1BSUmVnIG1fc3R1YkluZm9HUFI7CisgICAgICAgIEdQUlJl
ZyBtX2FycmF5UHJvZmlsZUdQUjsKICAgICAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJz
OwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxSZWZQdHI8QWNjZXNzQ2FzZT4+JiBtX2Nhc2Vz
OwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVJRD4mIG1fd2Vha1N0cnVjdHVy
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKaW5k
ZXggNmRjN2IwZTU0NDdmZTA2MGRiY2JkMjRkOTkwOTc1NjU3OWZjNjU3NC4uNWZiOGFlYWZhN2Rk
MTAyNWI1ZDQ4ZmUxZDExZWE1MjQ2MjQ3NDZjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaApAQCAtMjA3LDYgKzIwNyw3IEBAIGNsYXNzIEFycmF5
UHJvZmlsZSB7CiAgICAgU3RydWN0dXJlSUQqIGFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSB7IHJldHVybiAmbV9sYXN0U2VlblN0cnVjdHVyZUlEOyB9CiAgICAgQXJyYXlNb2RlcyogYWRk
cmVzc09mQXJyYXlNb2RlcygpIHsgcmV0dXJuICZtX29ic2VydmVkQXJyYXlNb2RlczsgfQogICAg
IGJvb2wqIGFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gJm1fbWF5U3RvcmVUb0hv
bGU7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbGFzdFNlZW5TdHJ1Y3R1
cmVJRCk7IH0KIAogICAgIHZvaWQgc2V0T3V0T2ZCb3VuZHMoKSB7IG1fb3V0T2ZCb3VuZHMgPSB0
cnVlOyB9CiAgICAgYm9vbCogYWRkcmVzc09mT3V0T2ZCb3VuZHMoKSB7IHJldHVybiAmbV9vdXRP
ZkJvdW5kczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lD
U3RhdHVzTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAu
aAppbmRleCBmYTBhNmQ1MjNiN2FkMGRmODgyMTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMz
ZDAyNTk2YmY2ZWE4ZmY5YThhNzJiNGRjMmExZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxs
TGlua1N0YXR1czsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3Mg
SW5CeVN0YXR1czsKLWNsYXNzIFB1dEJ5SWRTdGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNs
YXNzIERlbGV0ZUJ5U3RhdHVzOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlW
YWxJbmZvOwpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5r
U3RhdHVzKiBjYWxsU3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0
dXMgeyBudWxscHRyIH07CiAgICAgSW5CeVN0YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0g
ICAgUHV0QnlJZFN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVz
KiBwdXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1
cyB7IG51bGxwdHIgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMz
YWRkMWZmZTY2Mjc1ZDkxMTQuLjQwZDZhMWY5ZGE1ODI1MjA1NTRhYWMzNGVjMWE0NGU0MjlhZjg2
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcApAQCAtNDk0LDYgKzQ5NCw4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
CiAjZW5kaWYKICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KQogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBp
ZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
YWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogCiAgICAgc3RhdGUu
c2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtODEwLDYg
KzgxMiw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2Vu
ZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9jCiAgICAgICAgICAgICBzdHViSW5mby52
YWx1ZUdQUiwKICAgICAgICAgICAgIHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsCisgICAgICAgICAgICBzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiwKICAgICAgICAgICAgIHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAg
ICBrZXlzLAogICAgICAgICAgICAgd2Vha1N0cnVjdHVyZXMsCkBAIC04NDYsNyArODQ5LDcgQEAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25z
dCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKIAogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KSB7CiAgICAgICAgIGlmIChjYW5CZVNoYXJlZCkKLSAgICAgICAgICAgIHZtLm1fc2hhcmVkSklU
U3R1YnMtPmFkZChTaGFyZWRKSVRTdHViU2V0OjpIYXNoOjpLZXkoc3R1YkluZm8uYmFzZUdQUiwg
c3R1YkluZm8udmFsdWVHUFIsIHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwgc3R1YkluZm8ubV9zdHVi
SW5mb0dQUiwgc3R1YkluZm8udXNlZFJlZ2lzdGVycywgc3R1Yi5nZXQoKSkpOworICAgICAgICAg
ICAgdm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShz
dHViSW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BS
LCBzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgc3R1
YkluZm8udXNlZFJlZ2lzdGVycywgc3R1Yi5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBm
aW5pc2hDb2RlR2VuZXJhdGlvbihXVEZNb3ZlKHN0dWIpKTsKQEAgLTEwMjIsNiArMTAyNSw0NSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNz
VHlwZSB0eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZEludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVT
dG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50
OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmlu
dCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQz
OWM3YTRlYTZlNjFjZjU2NDhhZWZhYzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3Rh
dHVzLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklD
U3RhdHVzVXRpbHMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlk
U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewot
ICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19
Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMu
c2hyaW5rVG9GaXQoKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVk
QmxvY2stPnZtKCk7Ci0gICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2Ug
YXJlIG5vdCB5ZXQgdXNpbmcgYGNvbXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1
dF9wcml2YXRlX25hbWVgLgotICAgIC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhp
cyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElD
IGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWlu
c3RydWN0aW9uLT5pczxPcFB1dFByaXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1
cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3Ry
dWN0dXJlSUQpOwotCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5t
X25ld1N0cnVjdHVyZUlEOwotICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpOwotICAgIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKLSAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAg
IGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3NDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9m
ZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgaWYgKGRpZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJ
ZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJv
ZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFy
ZXN1bHQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVO
QUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4
aXQpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1Q
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKLXsKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBs
b2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEpCi17Ci0gICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHVi
SW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFp
c0lubGluZWFibGUoc3VtbWFyeSkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1h
cnkpOwotICAgIAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1w
dGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAg
Y2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCks
IG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlw
ZTo6U3R1YjogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51
LnN0dWI7Ci0gICAgICAgIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAg
cmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQ
cm94eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdl
dENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3
U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCksIHVpZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChj
b21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdl
dFN0YXR1czo6U2hvdWxkU2tpcDoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
SlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVz
ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFj
Y2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxv
Y2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0g
UHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25T
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsK
LSAgICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9t
VmFsdWVTZXR0ZXI6Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29y
U2V0dGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMp
OwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQo
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkp
OwotICAgIH0KLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENv
ZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1
c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9
IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAg
ICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAg
ICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAot
ICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+
IFB1dEJ5SWRTdGF0dXMgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29k
ZU9yaWdpbikpIHsKLSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0
ID0gY29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxp
bmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2Uo
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVz
LnN0dWJJbmZvKSB7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQt
Pm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+
b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0
YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpz
dGF0dXMucHV0U3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFz
ZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2Fs
bEV4aXRTaXRlRGF0YSk7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0
S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChz
ZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsK
LSAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2V0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0
W2ldOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9
IEdsb2JhbE9iamVjdFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLQotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmli
dXRlcyk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAg
IC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFBy
aXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5z
IHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVk
IHRvIHRha2UgCi0gICAgICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgot
ICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZh
bHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwot
Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNz
b3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8
IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0
aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdh
dGNocG9pbnQgc2V0LgotICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBo
YXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAg
ICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJl
IHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAg
Ly8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVk
IHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxl
YXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQg
aW4gc2V0IG1vZGUgYW5kIGl0Ci0gICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVj
dHVyZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWlu
ZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0
YWtlCi0gICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBn
ZXRzIGV4ZWN1dGVkLgotICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAg
ICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJl
Zm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdh
bnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNo
ZSBwdXQgdHJhbnNpdGlvbnMgb24gZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8g
c29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAg
ICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4K
LSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNE
aXJlY3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgp
KTsKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVy
ZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRv
LgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0
cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNT
RVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5k
ID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJh
bnNpdGlvbigKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlv
blNldCwgb2Zmc2V0KSk7Ci0gICAgICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQ
dXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBN
YWtlc0NhbGxzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAh
PSBTaW1wbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tp
XS5tYWtlc0NhbGxzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dW
ZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkg
PyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Ci12b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAg
ICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0
QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUg
dm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1
dEJ5SWRTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUo
dm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhl
cikKLXsKLSAgICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgYXV0byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhp
cyA9IFB1dEJ5SWRTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8g
TWFrZXNDYWxscyA6IFRha2VzU2xvd1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoICht
X3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVy
OwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBp
ZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93
KCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6
IG90aGVyLm1fdmFyaWFudHMpIHsKLSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhl
cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAg
ICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBU
YWtlc1Nsb3dQYXRoOgotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdl
U2xvdygpOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkK
LXsKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0
ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlv
blRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7
Ci0gICAgY2FzZSBOb0luZm9ybWF0aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0
aW9uKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAg
ICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5w
cmludCgiKFRha2VzU2xvd1BhdGgpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2Vz
Q2FsbHM6Ci0gICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2
OWFjNTcxM2RjOGU4ZjhiNjQ0MDAwY2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1
ZGUgIklDU3RhdHVzTWFwLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2lu
Y2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpT
R2xvYmFsT2JqZWN0OwotY2xhc3MgU3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1j
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7
Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVk
IHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAg
ICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAg
ICAgU2ltcGxlLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRo
LgotICAgICAgICBUYWtlc1Nsb3dQYXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2Ug
cGF0aHMgdGhhdCBtYWtlIGNhbGxzLgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAK
LSAgICBQdXRCeUlkU3RhdHVzKCkKLSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRl
KQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRl
ID09IE1ha2VzQ2FsbHMpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVz
KFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5
KSB7Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAg
ICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9T
dW1tYXJ5OjpNYWtlc0NhbGxzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6
OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xv
d1BhdGhBbmRNYWtlc0NhbGxzOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCkKLSAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAg
ICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNv
ZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEpOwotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0
dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBD
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0g
ICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
LCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAg
IFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsg
fQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsg
fQotICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFr
ZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2Fs
bHMoKSBjb25zdDsKLSAgICBQdXRCeUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAg
Ci0gICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXpl
KCk7IH0KLSAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXQoaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9p
ZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAot
ICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRp
ZgotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwg
Qnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBh
cHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0Zp
dCgpOwotICAgIAotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50
LCAxPiBtX3ZhcmlhbnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjQ1NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFm
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlh
bnQuaCIKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGlu
ZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFu
dChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17
Ci0gICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50
OjpvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9
IG90aGVyLm1fa2luZDsKLSAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJl
OwotICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25k
aXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1f
b2Zmc2V0OwotICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxM
aW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtT
dGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZSgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5k
ID0gUmVwbGFjZTsKLSAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5
SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQg
PSBUcmFuc2l0aW9uOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsK
LSAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3Rh
dHVzKQotewotICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0g
U2V0dGVyOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1
bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
b2Zmc2V0OwotICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0
YXR1cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFu
dDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0
dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVj
dHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAg
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFu
dDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgp
ICE9IFRyYW5zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VS
VChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9v
bGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1
Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0
dXJlID0gbnVsbHB0cjsKLSAgICBtX2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0
ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9j
YWxsTGlua1N0YXR1cyk7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVy
ZXMoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9u
OgotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50Ojpy
ZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJp
YW50OjptYWtlc0NhbGxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsK
LX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIG90aGVyKQotewotICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5v
dFNldDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwot
ICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJl
cGxhY2UoKnRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAg
Y2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAg
ICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0
aW9uV2l0aFJlcGxhY2Uob3RoZXIpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogewotICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3Ry
dWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRD
b25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9u
U2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
U2V0dGVyOiB7Ci0gICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMg
fHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlu
a1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNl
dC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25T
ZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1l
cmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlu
a1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAg
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxh
Y2UpCi17Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVw
bGFjZS5tX2tpbmQgPT0gUmVwbGFjZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2Uu
bV9vZmZzZXQpOwotICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAg
IEFTU0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxh
Y2UuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2Yg
bWVyZ2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBh
ZGQgYSBuZXcgZmllbGQgd2hpY2gKLSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3
aGlsZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vz
bid0Ci0gICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYg
dGhlIHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0
ZXNTdG9yYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFj
ZS5tX29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0
cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25l
d1N0cnVjdHVyZSkKLSAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0p
Ci17Ci0gICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2Vk
KG1fbmV3U3RydWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlk
VmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBz
d2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxl
bXB0eT4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0g
ICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRT
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5D
b250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6
Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQo
c3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2Nv
bmRpdGlvblNldCwgY29udGV4dCksICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBtX29mZnNldCk7Ci0gICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExp
bmtTdGF0dXMpOwotICAgICAgICBvdXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVl
NWYwYTFkZTQwOGE1ZmJiZDFjYjdhYjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDYWxsTGlua1N0YXR1czsKLQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5v
dFNldCwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0
dGVyCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5k
KE5vdFNldCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1f
bmV3U3RydWN0dXJlKG51bGxwdHIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFy
aWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRv
cj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBy
ZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBz
dGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAg
ICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9
PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1
Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBv
bGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRy
YW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1
cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBi
b29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMg
KGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxh
dGVkIGhlbHBlcnMuCi0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5v
SW50cmluc2ljOyB9Ci0KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBl
cnMuCi0gICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBD
YWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiBvdGhlcik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBt
YXJrSWZDaGVhcChWaXNpdG9yJik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0
QnlJZFZhcmlhbnQmIHJlcGxhY2UpOwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3Bl
cnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAg
ICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDZiY2NhNjdjZjE4NmM0NmJkYTAzMzA2YmEwNDNjMDQwZmE3Y2EwMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAK
QEAgLTAsMCArMSw1MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHlt
b3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitib29sIFB1dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1f
dmFyaWFudHMsIHZhcmlhbnQpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgp
Cit7CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRC
eVN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52
bSgpOworICAgIAorICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNl
IG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJl
dHJpZXZpbmcgTExJbnQgaW5mb3JtYXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAg
ICAgICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGlu
IGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVk
IGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE5vSW5mb3JtYXRpb24pOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnRpZmllciA9ICYocHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmlt
cGwoKTsKKworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1
Y3R1cmVJRDsKKyAgICBpZiAoIXN0cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJl
SUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICgh
bmV3U3RydWN0dXJlSUQpIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29k
ZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAg
ICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
CisgICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1
Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkK
K1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOworICAgIAorICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKKyAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGRpZEV4
aXQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNv
ZGVJbmRleCkpLnN0dWJJbmZvOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JT
dHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgY2FsbEV4
aXRTaXRlRGF0YSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJv
bUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShtYXApOworICAg
IFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0
YSk7CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworI2VuZGlmIC8vIEVO
QUJMRShKSVQpCit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1Yklu
Zm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Cit7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBiYXNl
bGluZUJsb2NrLCBzdHViSW5mbywKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0
U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKK30K
KworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4
aXRTaXRlRGF0YSkKK3sKKyAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0
dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKKyAgICBpZiAo
IWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKHN1bW1h
cnkpOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1w
dGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgIAorICAgIGNh
c2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAgICAgIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyog
bGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAgICBQdXRCeVN0YXR1cyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVz
ZXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
YWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJl
KCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFu
dCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUs
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJp
YW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9u
OiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gYWNjZXNzLm5ld1N0
cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRp
b25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5z
dXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpT
Qzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9
IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRlbnRpZmllcigpLCBhY2Nlc3Muc3Ry
dWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3Rh
dHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTog
eworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExp
bmtTdGF0dXM+KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5m
bygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIs
IHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigp
LCBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMu
Y29uZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0
U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAg
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgp
OworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNvbnRleHQg
OiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0
KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAgYXV0byBibGVzcyA9IFsmXSAoY29uc3Qg
UHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0dXMgeworICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBQdXRCeVN0
YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LAorICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICBiYXNlbGlu
ZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJl
c3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRG
cm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHJlc3Vs
dDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0
U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBi
bGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb21wdXRl
Rm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBj
YWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVG
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZp
ZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQoreworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQorICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1
bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNp
emUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAg
ICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9i
amVjdFR5cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CisKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUo
KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAK
KyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3Qg
aGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlk
YCBkZWZpbmUgbW9kZQorICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVm
aW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAg
ICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBp
ZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYg
KGF0dHJpYnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJl
cGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGls
bFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xs
IGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAg
ICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBl
eGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdv
aW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0
IGZyb20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBl
dmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhp
bmd5LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQg
dGFrZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFy
aWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhhdmUgYSBjYXNl
IHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAgICAgICAvLyBz
aG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0IG1lYW5z
IHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFsbGVkIHBy
aXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBhdGggdG8gdGhy
b3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAgaWYgKHByaXZh
dGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3Jl
IGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkK
KyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCisgICAg
CisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMu
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIElmIHRoZSBzdHJ1
Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVu
IGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHBy
b3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5
IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNp
dGlvbiBpcyBjYWNoZWQgdG8uCisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAg
ICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICgh
dHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAg
IGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFu
c2l0aW9uKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQpKTsKKyAgICAgICAgaWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtU
b0ZpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1
czo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJp
YW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxs
cygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBm
YWxzZTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRh
a2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVzOjpzaW5n
bGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmllckZvcklD
U3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJp
YW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdHUkVHQVRF
KFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlT
dGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQdXRCeVZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChB
YnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0p
Cit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAg
ICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjptZXJnZShj
b25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUgPT0gTm9J
bmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gbWVyZ2VTbG93ID0g
WyZdICgpIHsKKyAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90
aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7CisgICAgfTsK
KyAgICAKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246Cisg
ICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBTaW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAg
ICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAgICAgICAgICAgIGlmICgh
YXBwZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygp
OworICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgTWFrZXNDYWxsczoKKyAg
ICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICBy
ZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOworICAg
IGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFu
dC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJpYW50
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2b2lk
IFB1dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQo
IihOb0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
U2ltcGxlOgorICAgICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6Cisg
ICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiKE1ha2VzQ2FsbHMpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyYTFjNzNjOGY0MWNhMTkyZTU4
ZDRiZTFkZTE2NjEzZDkwMDA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgiCisjaW5j
bHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisj
aW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2NsYXNzIEpT
R2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hhaW47Citj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7
CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBz
byB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAorICAgICAg
ICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisgICAgICAg
IFNpbXBsZSwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4K
KyAgICAgICAgVGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBh
dGhzIHRoYXQgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscworICAgIH07CisgICAgCisg
ICAgUHV0QnlTdGF0dXMoKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7
CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAg
ICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1h
a2VzQ2FsbHMpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdHViSW5m
b1N1bW1hcnkgc3VtbWFyeSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAg
ICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgICAgIG1f
c3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgorICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
TWFrZXNDYWxsczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Ns
b3dQYXRoOgorICAgICAgICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5k
TWFrZXNDYWxsczoKKyAgICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIFB1dEJ5U3RhdHVzKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFy
aWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAgICB7CisgICAgICAgIG1fdmFyaWFu
dHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRG
bGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgUHV0QnlTdGF0
dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIENhY2hl
YWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYsIENv
ZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29t
cHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFz
ZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luKTsKKyNlbmRpZgorICAg
IAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIAorICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0K
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1h
dGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNp
bXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBib29sIG1h
a2VzQ2FsbHMoKSBjb25zdDsKKyAgICBQdXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0Owor
ICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMu
c2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4mIHZhcmlhbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgYXQo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNv
bnN0IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGF0KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xlSWRlbnRpZmllcigp
IGNvbnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJik7
CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorI2lmIEVOQUJM
RShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3RhdGljIFB1dEJ5U3RhdHVz
IGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAg
Ym9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIHZvaWQgc2hyaW5r
VG9GaXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZlY3RvcjxQdXRCeVZhcmlh
bnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjA3
YzUzNWIzNzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCkBAIC0wLDAg
KzEsMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorCisj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQor
ICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sKKyAgICAqdGhpcyA9IG90
aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1
dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIubV9raW5kOworICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29u
ZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVl
PENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgZWxzZQorICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lkZW50aWZpZXIgPSBvdGhl
ci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQdXRCeVZhcmlhbnQgUHV0
QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQ
dXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0
QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RG
TW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgIHJlc3VsdC5tX25ld1N0
cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCit7
CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1
bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGTW92
ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBQ
dXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRT
dHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1
cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUHV0
QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQoreworICAgIGlm
IChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxhY2U7CisgICAgbV9jb25k
aXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OndyaXRlc1N0
cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFu
c2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5VmFyaWFu
dDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQdXRCeVZh
cmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVy
OworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlWYXJp
YW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lkZW50
aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2lkZW50aWZpZXIgJiYg
KG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAgICAgQVNTRVJUKG1fY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1
cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAg
ICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7CisgICAgICAgICAgICBp
ZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykp
IHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRp
b246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFj
ZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFj
ZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAg
ICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9
IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAg
ICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb25k
aXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6IHsKKyAg
ICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90
aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAh
PSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRD
b25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRo
KG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9u
U2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0
aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAKKyAgICAgICAg
aWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJn
ZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAgICAgICBtX29sZFN0cnVj
dHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0
aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKQoreworICAgIEFTU0VS
VChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJl
cGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKKyAgICBB
U1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBBU1NFUlQoIXJlcGxhY2Uu
cmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3Jr
cyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdo
aWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBh
dGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAorICAgIC8vIHdvcmsg
aWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGgg
aXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOworICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVZh
cmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1faWRl
bnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JF
R0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
dXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9vbGRT
dHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlKQor
ICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBs
YXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsK
KworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBpZiAoIW1fb2xk
U3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExp
dmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMg
JiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
Kwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8Iik7CisgICAgb3V0
LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmlu
dCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAg
ICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBvdXQucHJp
bnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRl
eHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4
dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Cisg
ICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOworICAgICAg
ICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgKQEAgLTAs
MCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVT
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rU3RhdHVzOworCitjbGFz
cyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAg
ICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAgICAKKyAgICBQdXRCeVZh
cmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgICAgICA6IG1fa2luZChO
b3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAgICAgLCBtX25l
d1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmllcihXVEZNb3ZlKGlkZW50
aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5
VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5VmFyaWFu
dCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0
aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3Ry
dWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICBz
dGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAgICAKKyAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAg
ICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBS
ZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1
cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAg
CisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBT
ZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRT
dHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFRyYW5z
aXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVz
KCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKKyAgICBib29s
IG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0K
KyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0
IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVk
IGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50
cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMu
CisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBDYWxs
TGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQo
KTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFyaWFudCYg
b3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAgIGJvb2wg
ZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5VmFyaWFudCYg
b3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lk
ZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1faWRlbnRp
ZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZp
ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxh
Y2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAgICBLaW5kIG1fa2luZDsK
KyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1
Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsKKyAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CisgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAppbmRl
eCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3Li5mY2UwZjRkOGVlMTBl
ZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02MiwxMCArNjIsMTAgQEAg
R2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAotUHV0
QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBzdGF0dXMpCitQdXRCeVN0
YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsKLSAgICBhdXRvIHN0YXR1
c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsKLSAgICBQdXRCeUlkU3Rh
dHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBzdGF0dXNQdHIgPSBtYWtl
VW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3RhdHVzKiByZXN1bHQgPSBz
dGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29kZU9yaWdp
biwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNyw2
ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAgICAgIHBh
aXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIg
OiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAg
ICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCmluZGV4IGJk
MTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0OTgzZGJjNzY3ZDA3ZTI4
MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
IkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJJ
bkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5
U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAg
CiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4m
LCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVzKiBhZGRHZXRCeVN0YXR1
cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsKLSAgICBQdXRCeUlkU3Rh
dHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRCeUlkU3Rh
dHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4m
LCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFkZEluQnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBEZWxldGVCeVN0YXR1cyog
YWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5U3RhdHVz
Jik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyYpOwpA
QCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAgCiAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9w
dHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7CisgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0dXM+Pj4gcHV0czsKICAg
ICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxJbkJ5U3RhdHVz
Pj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0
cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzPj4+IGNoZWNrUHJp
dmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZjZWIyM2RjM2NjMjFkMzI3
ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRmNzgxOWQ0NzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogYwogICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0R2V0QnkoY29kZUJs
b2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJsb2NrLCAq
dGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICByZXNldFB1dEJ5
KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2Nr
LCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJsb2NrLCAqdGhpcywgSW5C
eUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEyOGU2ZTI1MDFhYWIxOGU1
NWQ0MWE0Li5lNjdiYzEwOGJlMzIwZGQ2ZDI1OWU3N2M4MWI5ZDUxYzQ1Y2Y1ODRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaApA
QCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdl
dEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZhbCwKLSAgICBQdXQsCisg
ICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAg
ICBIYXNQcml2YXRlTmFtZSwKQEAgLTM2NSw2ICszNjYsNyBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgICAgIEdQUlJlZyBicmFuZEdQUjsKICAgICB9IHJlZ3M7CiAgICAgR1BSUmVn
IG1fc3R1YkluZm9HUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fYXJyYXlQcm9m
aWxlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgR1BS
UmVnIHZhbHVlVGFnR1BSOwogICAgIC8vIEZJWE1FOiBbMzItYml0c10gQ2hlY2sgaWYgU3RydWN0
dXJlU3R1YkluZm86OmJhc2VUYWdHUFIgaXMgdXNlZCBzb21ld2hlcmUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKaW5kZXggZDFjMGI0NmE2YTkwNzM5MDM1OWRkMzBjMGNlNjhjMTFjMTdiMjgyMS4uMDdjMmQx
ZjM1ZGIyZjU5NDYxYTQ5NzQ5NWEzZmEyYzc0NDZjNzdhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApA
QCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9yLmgiCi0jaW5j
bHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVk
ZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAj
aW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC0zOTczLDcgKzM5NzMsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50c1tpXTsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAgICAgICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0IHRoaXNTZXQgPSAqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAg
ICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKQEAgLTM5ODIsNyArMzk4Miw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1
ZSA9IG9yaWdpbmFsVmFsdWU7CiAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlz
VmFsdWUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXNTZXQub25s
eVN0cnVjdHVyZSgpICE9IG5ld1N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICB0cmFu
c2l0aW9ucy5hcHBlbmQoCkBAIC0zOTkwLDcgKzM5OTAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgICAgIH0gLy8gZWxzZSB0aGlzIGlzIHJlYWxseSBhIHJlcGxhY2Uu
CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJn
ZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDE0MCwxMCArNDE0MCwx
MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlQWNj
ZXNzSW5saW5pbmcoKSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAg
ICAgICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0IHx8IG5vZGUt
Pm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkOwogICAgICAgICAgICAgYXV0byBwcml2YXRlRmll
bGRQdXRLaW5kID0gbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQgPyBub2RlLT5wcml2
YXRlRmllbGRQdXRLaW5kKCkgOiBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCk7Ci0gICAgICAg
ICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisg
ICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLAogICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0
KCksCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgpLAor
ICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAg
ICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgICAgIGJvb2wg
YWxsR29vZCA9IHRydWU7CkBAIC00MTUxLDcgKzQxNTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAg
ICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6
IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeVZh
cmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAgICAgICAg
ICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50
LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgu
d2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFsbEdvb2QgPSBmYWxzZTsKQEAgLTQxNjIsMTQgKzQxNjIsMTQgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xv
YmJlckxpbWkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9n
cmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
KSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5l
d1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxh
Y2UpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQubWVy
Z2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0NzMsNyArNDQ3Myw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBG
aWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNh
c2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC00NjUyLDEwICs0NjUy
LDEwIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRl
cklDU3RhdHVzKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0g
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOiB7CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKLSAgICAgICAg
ICAgIG5vZGUtPnB1dEJ5SWRTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3Ry
dWN0dXJlU2V0KCkpOworICAgICAgICAgICAgbm9kZS0+cHV0QnlTdGF0dXMoKS0+ZmlsdGVyKHZh
bHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxp
bWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGMyMTZhMzk2ZDcxNjA0MjBkZmI0ODE1ZjEyN2U3
ODU5ZDVhOTE3M2IuLjZlMjc1MzEwNGJkMzgxNTljY2IxYjFkMzkzNzE1Mzg2YjY0ODZiNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmNwcApAQCAtNDAyLDcgKzQwMiw3IEBAIGNsYXNzIEFyZ3VtZW50c0Vs
aW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0
YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpAQCAtMTI2
NSw3ICsxMjY1LDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggNjNlNjhkMDM3
ZmUxMTEwMWFlNDEyYTI3ODIyNTNmNTk0M2JkNjI3Yi4uN2Y0MDJlNjk3ZjlkYTA3YTRjNTVhZGE1
MTJjNDc5ZGM0ZjIyMzc2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJBcnJheVByb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ1aWx0
aW5OYW1lcy5oIgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtNzQsNyArNzMsNyBAQAog
I2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1
dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3Rh
dHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdGFj
a0FsaWdubWVudC5oIgpAQCAtMjM5LDExICsyMzgsMTEgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIg
ewogICAgIGJvb2wgY2hlY2tQcmVzZW5jZShKU09iamVjdCoga25vd25CYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICB2b2lk
IGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwg
UHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIC8vIFdvcmtz
IHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeUlkVmFy
aWFudC4KKyAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVy
IGZvcm0gb2YgUHV0QnlWYXJpYW50LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhcmlhbnRUeXBl
PgogICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJik7CiAKLSAgICBOb2RlKiBzdG9yZShO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYsIE5v
ZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICB2b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiopOwpA
QCAtMjUzLDEzICsyNTIsMTMgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIHZvaWQgaGFu
ZGxlR2V0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRp
b24sIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50
aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzKTsKICAgICB2b2lk
IGVtaXRQdXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBO
b2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9k
ZSk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVl
LCAgY29uc3QgUHV0QnlTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CiAgICAgdm9p
ZCBoYW5kbGVQdXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0
YXR1cyYsCisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsCiAgICAg
ICAgIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSk7
CiAKICAgICB2b2lkIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKLSAgICAgICAgTm9kZSogYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSog
dmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsKKyAgICAg
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCk7CiAKICAgICB2b2lkIGhhbmRsZURlbGV0ZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgRGVsZXRlQnlTdGF0dXMsIEVDTUFNb2RlKTsKQEAgLTQ1MTQsNyAr
NDUxMyw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgICAgIC8v
IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZSBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZgogICAgICAgICAgICAgICAgIC8vIHRoZSBzdHJ1
Y3R1cmVzIGluIHRoZSB2YXJpYW50LnN0cnVjdHVyZVNldCgpIGFncmVlIG9uIHRoZSBwcm90b3R5
cGUgKGl0IHdvdWxkIGJlCiAgICAgICAgICAgICAgICAgLy8gaGlsYXJpb3VzbHkgcmFyZSBpZiB0
aGV5IGRpZG4ndCkuIE5vdGUgdGhhdCB3ZSBhcmUgcmVseWluZyBvbiBzdHJ1Y3R1cmVTZXQoKSBo
YXZpbmcKLSAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxs
IGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlJZFN0
YXR1cyB3b3JrLgorICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBUaGF0
IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1cy9QdXRC
eVN0YXR1cyB3b3JrLgogCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJpZ2h0IG5vdywgaWYg
d2UgaGF2ZSBhbiBPUENTLCB3ZSBoYXZlIG1vbm8gcHJvdG8uIEhvd2V2ZXIsIHRoaXMgd2lsbAog
ICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIG9uY2Ug
d2UgaGF2ZSBhIGh5YnJpZCBkYXRhIHN0cnVjdHVyZSBmb3IKQEAgLTQ1OTMsOSArNDU5Miw5IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKIH0K
IAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKK05vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBj
b25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwog
CiAgICAgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKICAg
ICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZz
ZXQoKSwgdmFsdWUpOwpAQCAtNDk5OCwzOSArNDk5NywzOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbkJ5SWQoVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBD
YWNoZQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKLSAgICBOb2RlKiBi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQ
dXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21h
TW9kZSkKKyAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5v
ZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3Qs
IEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlmIChpc0RpcmVjdCkKICAgICAgICAgYWRkVG9H
cmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSks
IGJhc2UsIHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIGFkZFRvR3JhcGgocHV0QnlJZFN0YXR1
cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgYWRkVG9HcmFwaChw
dXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8o
aWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKIH0KIAogdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZh
bHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJl
Y3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBj
b25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5k
ZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKLSAgICBpZiAoIXB1dEJ5SWRT
dGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRp
b25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5p
c1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0dXMu
bnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAgICAg
ICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNl
T1NSRXhpdCk7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBw
dXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVt
VmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8
IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRC
eVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9y
cGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgp
KSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIHx8IHB1dEJ5U3Rh
dHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5n
TGlzdFNpemUoKSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRT
dGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5U3RhdHVzLm51
bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmIChwdXRC
eVN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24p
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICghY2hl
Y2socHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNr
KHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1
cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUwMzksMjggKzUwMzgsMjggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
Pm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRC
eUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAo
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewog
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0
YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRz
KCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAg
ICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAg
IGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkg
PT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07
CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2U6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNl
IFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5
U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAg
ICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MDY4LDEyICs1MDY3
LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewot
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdp
bigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgYWRkVG9HcmFwaChD
aGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xk
U3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRp
b25TZXQoKSkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwg
ZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTUxMzUsMTIg
KzUxMzQsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVy
OiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3Jh
cGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2Rl
T3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6
OlNldHRlcjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIE5vZGUqIGxvYWRl
ZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50KTsKICAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5
SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21h
TW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwg
cHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC01MTg0LDI2ICs1MTgzLDI2IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQogICAgIAogICAgIGRlZmF1bHQ6IHsKLSAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlz
RGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0gfQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFt
ZUJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlk
U3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1
dEtpbmQpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBQcml2YXRlRmllbGRQ
dXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlz
U2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNl
QWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkK
KyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFw
dXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQp
OwogICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZp
ZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygp
ID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0
YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEp
IHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1h
a2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNz
SW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4g
T3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAg
ICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9y
cGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVs
ZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
QEAgLTUyMTEsMjkgKzUyMTAsMjkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJp
dmF0ZU5hbWVCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigp
KSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5
SWQoKTsKICAgICAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykp
LCBiYXNlKTsKICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5
VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikK
KyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9m
ZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0g
ICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAg
ICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEt
PmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBo
KE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3Rh
dHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAg
IGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAg
IHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBs
YWNlOiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAgICAgQVNTRVJU
KHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFz
ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIHN0b3JlKGJhc2UsIGlk
ZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MjQxLDkgKzUyNDAsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgIGNhc2Ug
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQ
dXRLaW5kLmlzRGVmaW5lKCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAg
ICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5
U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkp
LCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewpA
QCAtNjQ1NCw0MCArNjQ1MywzMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92
YWx1ZSk7CiAgICAgICAgICAgICBib29sIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gZmFsc2U7
CiAKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCk7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFw
LmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgpKSkuYnlW
YWxJbmZvOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29kZSBpcyBu
b3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMgbnVsbC4K
LSAgICAgICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9u
LiBGb3IgYHB1dF9wcml2YXRlX25hbWVgLCB3ZSBtaWdodCBoYXZlIHNvbWUgaW5mbyBmcm9tCi0g
ICAgICAgICAgICAgICAgLy8gTExJbnQgSUMsIGluY2x1ZGluZyBjYWNoZWQgY2VsbCB0aGF0IHdl
IGNvdWxkIHVzZSBpZiBCeVZhbCBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY3NzkKLSAgICAgICAg
ICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICAgICAmJiBieVZhbEluZm8t
PnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0
aAotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3Rh
bnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNo
ZWRJZDsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxs
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
TnVtYmVyXTsKLSAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgIGlmICghbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkSWRlbnQpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAg
ICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKKworICAg
ICAgICAgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdGF0dXMu
c2luZ2xlSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyLmlzU3ltYm9sQ2VsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQs
IE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0
YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmln
aW4oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlk
KGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGJ5dGVj
b2RlLm1fcHV0S2luZCk7CisgICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zm
c2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICh0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKLSAgICAgICAgICAgICAgICBoYW5kbGVQ
dXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2luZCk7Ci0gICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICBpZiAoIXRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQogICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWUsIE9wSW5mbygpLCBPcEluZm8oYnl0ZWNvZGUu
bV9wdXRLaW5kKSwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHV0X3ByaXZhdGVfbmFtZSk7CkBAIC02NTY3LDEyICs2NTU2LDEyIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJO
dW1iZXJdOwogICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGly
ZWN0KCk7CiAKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBwdXRCeVN0YXR1
cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLAotICAgICAgICAgICAgICAgIGN1cnJl
bnRDb2RlT3JpZ2luKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7
CisgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGRp
cmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7Cisg
ICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgZGly
ZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIApAQCAtNzk3
OSwxMyArNzk2OCwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaEdsb2JhbFByb3BlcnR5
KGdsb2JhbE9iamVjdCwgaWRlbnRpZmllck51bWJlcikpCiAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
c3RhdHVzOworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1czsKICAgICAgICAgICAg
ICAgICBpZiAodWlkKQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlLCBQcml2YXRl
RmllbGRQdXRLaW5kOjpub25lKCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRC
eVN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6
Om5vbmUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdGF0
dXMgPSBQdXRCeUlkU3RhdHVzKFB1dEJ5SWRTdGF0dXM6OlRha2VzU2xvd1BhdGgpOworICAgICAg
ICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeVN0YXR1cyhQdXRCeVN0YXR1czo6VGFrZXNTbG93
UGF0aCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKLSAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZQorICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5
VmFyaWFudDo6UmVwbGFjZQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0
dXJlKCkuc2l6ZSgpICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRC
eUlkLCBPcEluZm8oQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSksIE9w
SW5mbyhieXRlY29kZS5tX2dldFB1dEluZm8uZWNtYU1vZGUoKSksIGdldChieXRlY29kZS5tX3Nj
b3BlKSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC04ODE5LDQ1ICs4ODA4LDI3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
VmFsKEJ5dGVjb2RlIGJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRlCiAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEJ5
dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBib29sIGNvbXBp
bGVkQXNQdXRCeUlkID0gZmFsc2U7Ci0gICAgewotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXI7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0
QnlJZFN0YXR1czsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
ICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVN
YXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5i
eVZhbEluZm87Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90
IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0g
ICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLgotICAg
ICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0
dWJJbmZvCi0gICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAg
ICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICYmICFtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRU
eXBlKQotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAg
ICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJZDsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVy
TnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsK
LSAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBm
cm96ZW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgp
KQotICAgICAgICAgICAgICAgICAgICBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVu
dGlmaWVyLmNlbGwoKSk7CisgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZFR5cGUpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgeworCisgICAgICAgIFB1
dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9p
Y0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKKyAgICAgICAgaWYgKENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsK
KyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwor
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7
CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5p
c1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29u
c3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwg
T3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAot
ICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENv
ZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29k
ZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKICAg
ICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAgICAgICAgICAgIGhh
bmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUp
OwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOTE2NDcwZDE3ZDUzYWYzNTZiZDUxNDRj
OTRlNjA3ZGEwNzk1OGI0YS4uNmYyMDRkMmM1ZGUwYTYxMmY3MzFjOTU3YjQ2MWRjZjMwYzRhMTFh
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTU2OSw3
ICs1NjksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgSW5pdGlhbGl6ZUVu
dHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBj
YXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCmluZGV4IDg2YTNkMDc2NjRkN2ZhOTI3NTEyOTk3NzlmNDZmMTk3MmIw
YWQwZjMuLjRjZTlmZjBlYjVkYTUxMGVjMjM0MDY0NjJhNzFlODgwOTUwOTYyMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCkBA
IC04MSw3ICs4MSw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXggZWFl
YWY4NWVhMjU0MTcyNTc1NWY0OGNlZmRlZGUwM2I4MWM5ZmEyYS4uYjg4MjVhY2FlMzRlNTVmODky
NjU5MTI5ODQxZDkzMjRhNDBjMTYxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNp
bmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRC
eVN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKQEAgLTUwMSw3ICs1MDEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgCiAKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFy
aWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJl
KCkuZ2VuZXJpY0ZpbHRlcihbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuY29udGFpbnMobV9ncmFwaC5y
ZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBA
IC01MTMsMTEgKzUxMyw5IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbgogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0
dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKHZhcmlhbnQuaWRlbnRpZmllcigpLCB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTIxMyw3ICsxMjExLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9w
ZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0QnlPZmZz
ZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCiAgICAgewog
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBj
aGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKQEAgLTEyMjQsNyArMTIyMiw3IEBAIGNsYXNzIENv
bnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2hpbGRFZGdlLnNl
dFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9u
ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIHRyYW5zaXRpb24gPSBtX2dyYXBoLm1fdHJh
bnNpdGlvbnMuYWRkKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
dmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAgfQpAQCAtMTI2OSw3ICsx
MjY3LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNo
aWxkRWRnZSk7CiAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OwogCi0gICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7
CiAgICAgICAgICAgICBpZiAoZGlkQWxsb2NhdGVTdG9yYWdlKSB7CiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrICsgMSwgU3BlY05vbmUsIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHksCkBAIC0xNDA2
LDEwICsxNDA0LDEwIEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgaWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iob3Jp
Z2luLnNlbWFudGljKSwKICAgICAgICAgICAgIGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVj
dHVyZVNldCgpLAotICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVpZCgp
LAorICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAogICAgICAgICAgICAg
aXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAgIGlmICghc3RhdHVzLmlz
U2ltcGxlKCkpCkBAIC0xNDI0LDggKzE0MjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBuZXdT
ZXQ7CiAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7Ci0gICAgICAgIGZvciAo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewotICAg
ICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDgsNyArMTQ0Niw3IEBAIGNs
YXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQu
YWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFj
ZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkg
fHwgcHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlh
bnQub2xkU3RydWN0dXJlKCkpKTsKQEAgLTE0NjQsOCArMTQ2Miw4IEBAIGNsYXNzIENvbnN0YW50
Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0
cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhp
bmdzIHRvIHRoaXMuCiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5SWRTdGF0dXMsIG5vZGUt
Pm9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50aWMsIHN0YXR1cykpLAor
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlTdGF0dXMsIG5v
ZGUtPm9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwK
ICAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUpKTsKIAogICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDYwZmJiMTVjNTkxNmI4OWRiNGM2ZDU1
MTUwYzY2NTNjMzdlMThmMWUuLmU2NDgxNjdjMTE4NmJjOGM5M2YzMmU4YzU0YmU3NTE4MzBlZjEx
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTI0Nyw3ICsy
NDcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBN
YXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmlu
ZGV4IGFhNDk2NGU5YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3Mzg1MDkuLmRlNGYyM2ZiYWEw
Yzk2ZGJjOGFhYzUyNDkxNTNmOTg2ZTM5OGEyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjg2NSw3ICsyODY1LDcgQEAgY2xhc3MgRml4dXBQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXgg
YTg0MDY4ZTc3NDZjOWRjNDM5NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIw
ZDUzNWQ2MDhmMGE5NTA4NzYzOGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKQEAgLTM4NSw4ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9k
ZS0+aGFzSW5CeVN0YXR1cygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5
U3RhdHVzKCkpOwotICAgIGlmIChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91
dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhh
c1B1dEJ5U3RhdHVzKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3Rh
dHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1l
dGFkYXRhKCkudG9SYXcoKSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZjOWRi
MWE3YzU0NGZhMWNhOThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5YTc5
MTg0MmU4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRo
aXMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBs
aW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5rQnVm
ZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAgICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFhNDA5
NGY1NzA2MGE3Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkxYjI5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTk5
LDYgKzE5OSwxMSBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewog
ICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdl
bmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlWYWwo
Y29uc3QgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQ
YXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAgIHZv
aWQgYWRkRGVsQnlJZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2Vu
ZXJhdG9yKiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElubGlu
ZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBAIC0z
NjAsNiArMzY1LDcgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsK
ICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
cj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVy
PEpJVEdldEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGlu
ZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAgICBW
ZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9wdXRC
eVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9y
PiwgND4gbV9kZWxCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5
VmFsR2VuZXJhdG9yPiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3Jh
cHBlcjxKSVRJbkJ5SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2NGYw
ZDZmNDY0NjY0ZDBmLi4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsxMDYs
NyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRl
VHlwZSYgc3RhdGUpCiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoK
LSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFkMjc3
YTE5YmQxYzlhLi43Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5j
bHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50Lmgi
CisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kVmFy
aWFudC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0
aW9uLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAKIHN0
cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
cjsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3RvcjxQ
dXRCeVZhcmlhbnQsIDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJl
cygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0zMjEw
LDE1ICszMjEwLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFz
PEluQnlTdGF0dXMqPigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0dXMo
KQorICAgIGJvb2wgaGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkg
PT0gRmlsdGVyUHV0QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0
QnlTdGF0dXM7CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0dXMo
KQorICAgIFB1dEJ5U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NFUlQo
aGFzUHV0QnlJZFN0YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5SWRT
dGF0dXMqPigpOworICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNE
ZWxldGVCeVN0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5k
ZXggZTc1YmNmZThhMWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2ZkYWM4
ZjIzNTE4Mjg3MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oRmlsdGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3Jv
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGaWx0
ZXJQdXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRlbGV0
ZUJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJTZXRQ
cml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCBi
MWNmZWU4YWNlYzM4Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4YjFj
NGNmYTZhMzExMDI4Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMTUsMjEgKzIxNSw2
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0
dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxs
OiB7Ci0gICAgICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfcHV0
X2J5X3ZhbCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUgb3BfcHV0X2J5X3ZhbCBh
cyBQdXRCeUlkIGFuZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVuIHdlIGZvdW5kIFN0cnVj
dHVyZVN0dWJJbmZvIGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAgICAgICAgICAgICAgLy8g
QnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZpbmQgU3RydWN0dXJlU3R1
YkluZm8gaGVyZS4gTGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpby4KLSAgICAg
ICAgICAgICAgICAvLyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlzIGNvbXBpbGVkLgotICAg
ICAgICAgICAgICAgIC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAgICAgICAgICAgICAgLy8g
My4gU2luY2UgKEEpIGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcHV0X2J5X3ZhbCwg
KEIpIGNhbiBnZXQgU3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQgYXMg
aW5saW5lZCBTZXR0ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0LiAoQSkncyBKSVREYXRh
IGlzIGRlc3Ryb3llZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNvbWVz
IExMSW50LgotICAgICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxvY2sgaW5saW5pbmcgKEEp
IGdldHMgT1NSIGV4aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkgZ2V0
cyBCYXNlbGluZSBDb2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgLy8gNi4gKEIpIGdl
dHMgT1NSIGV4aXQuIChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJbmZv
IGluIChBKSBmb3IgUHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBkb2Vz
IG5vdCBleGlzdCBzaW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQgb25jZS4KLSAgICAgICAg
ICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5maW5kQnlWYWxJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBieVZhbEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1Yklu
Zm8tPmRvbmVMb2NhdGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAKaW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhmZDU4
YS4uMWY0MTgzMThhNGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2Fz
ZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKQEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBl
IGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0
aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhh
cyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVy
IHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52
YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxs
cHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAg
ICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2Uo
bnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcgQEAg
Y2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYyZWNl
ODBmZTc0ZjIuLjg5ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01hcFNl
dDoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRiOWM5
YTVhMjAuLmQ1NDk2NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyArMzU5
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0ZXJD
YWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZTMyNDdmOGM2
OTI2ZDI5N2I2Y2EyY2YxNGUyZDZiNWQ5OTNlYjZiLi42MDNmZjdiMmU1MmRjZWVlM2JjMzY1ZGJj
NGVlMzNiM2MzN2UxZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0
MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uYzhmYzE1NzQxNTlkNDQ2Y2RlYzg5ZTg3Y2Q3MThkMzBhNTIw
MTY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCkBAIC01ODcxLDcgKzU4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
IGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5k
ZXggNTQxMGQ5MDg5NmRjNGYwMTA1NzkzMGRmODJmNjYxOTJiODFmNmMwZi4uYzVlNWNmMzZhNzcw
ZDE1ODNiNjkzZGZkODgxZDY0MjRhYjE3YmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTMxMiw4ICszMTIsOCBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmRmZ1No
b3VsZFdhdGNoKCkpOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCBm
ZGE2NGQzNWRhMzQyODg5Yzc5OGMwNTFlOTU3NmU4YTFlMzNhMzliLi5mMWEzODA5ZDdlZmUzMGY4
ZDU5YmEyMWZhY2QwNzA5ZTQzOGI5MDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTE5Niw3ICsxOTYs
NyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CkBAIC00MjEsNyArNDIxLDcgQEAgY2xhc3MgVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggMDNm
ODY1MmM2Y2I4MmM2MjAyMGQxZTY2YmI1OWY0NjU5MWQ4M2U0Yy4uODNiNTFiYTljZjc2NWRhMDQ2
MzczYTc5YjFjYTAzMzBjNDNjN2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtNDA3LDcgKzQwNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNWEzZTk4Zjc1
MzcwMWQzYjM0Zjg0Yjk4MDgzZDI0ZGFlOGVmNzEwMC4uYzM5ZjJkZGYzNzUzNjMxYjE1Mjg1MTFh
YmM5MGU3MWE1MGEzMDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcApAQCAtMTY0OSw3ICsxNjQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTg5NTEsNyArODk1
MSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAy
PiBjYXNlczsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAg
ICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLnNpemUoKTsgai0tOykg
ewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpW2pdKTsKICAgICAgICAg
ICAgICAgICBiYXNlU2V0LmFkZChzdHJ1Y3R1cmUpOwpAQCAtODk2NiwxNiArODk2NiwxNiBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ld
LCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52
YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJp
YW50c1tpXTsKIAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0
aW9uLCB2YXJpYW50LmtpbmQoKSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJh
bnNpdGlvbnMoKS5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luLnNlbWFu
dGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC04OTg3
LDcgKzg5ODcsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4
aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkt
PnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmluZGV4IDY5N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQw
OWY0ZjUxOWIwNjguLjc4ZmQ0OTQzZjllY2JjNGMzNWM3Y2RjYjMyYjczNzdjYWI5ZjFlZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCkBAIC0xNDEsNyArMTQxLDcgQEAg
ZGVmIHNlbGYud3JpdGVfYnl0ZWNvZGVfc3RydWN0cyhieXRlY29kZV9saXN0LCBieXRlY29kZV9z
dHJ1Y3RzX2ZpbGVuYW1lKQogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNp
bmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNs
dWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJUb1RoaXNTdGF0dXMuaCIKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBmMDRjMWY0MjhlMTBiZmM3MWZhNWNlMzVlMDAy
ODY4YmI3OGFkZWY2Li45MWIzYjMxNTUxMGRhNjgyNGIzYzk2MzQxMGUzMzZkOTU4OWFiYzdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaApAQCAtNjcsMTAgKzY3LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qp
IFwKICAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkRmllbGRTdHJp
Y3RPcHRpbWl6ZSkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRQdXRQcml2YXRlRmllbGRG
aWVsZFN0cmljdE9wdGltaXplKSBcCi0gICAgbWFjcm8oUHV0QnlJZEFkZEFjY2Vzc0Nhc2UpIFwK
LSAgICBtYWNybyhQdXRCeUlkUmVwbGFjZVdpdGhKdW1wKSBcCi0gICAgbWFjcm8oUHV0QnlJZFNl
bGZQYXRjaCkgXAotICAgIG1hY3JvKEluQnlJZFNlbGZQYXRjaCkgXAorICAgIG1hY3JvKFB1dEJ5
QWRkQWNjZXNzQ2FzZSkgXAorICAgIG1hY3JvKFB1dEJ5UmVwbGFjZVdpdGhKdW1wKSBcCisgICAg
bWFjcm8oUHV0QnlTZWxmUGF0Y2gpIFwKKyAgICBtYWNybyhJbkJ5U2VsZlBhdGNoKSBcCiAgICAg
bWFjcm8oRGVsQnlSZXBsYWNlV2l0aEp1bXApIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRo
R2VuZXJpYykgXAogICAgIG1hY3JvKE9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCBjOWIwMWMwZDA1YTVkNmYwYzExZDBhMzcz
ODFjMmQ5OGVmYTQ3MTMyLi41MGRlODU1YjZhYzkwZWU2ZDNkMWM5NjFlNDQ4NDgyMzk1YTQ2MTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC01MTAsNiArNTEwLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBtX2dldEJ5VmFsSW5kZXggPSAwOwog
ICAgIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggPSAwOwogICAgIG1fcHV0QnlJZEluZGV4ID0gMDsK
KyAgICBtX3B1dEJ5VmFsSW5kZXggPSAwOwogICAgIG1faW5CeUlkSW5kZXggPSAwOwogICAgIG1f
aW5CeVZhbEluZGV4ID0gMDsKICAgICBtX2RlbEJ5SWRJbmRleCA9IDA7CkBAIC02NjIsNiArNjYz
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBSRUxFQVNFX0FT
U0VSVChtX2dldEJ5SWRJbmRleCA9PSBtX2dldEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9PSBtX2dldEJ5SWRzV2l0aFRoaXMuc2l6ZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUo
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9wdXRCeVZhbEluZGV4ID09IG1fcHV0QnlWYWxzLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9pbkJ5SWRJbmRleCA9PSBtX2luQnlJZHMuc2l6
ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luc3RhbmNlT2ZJbmRleCA9PSBtX2luc3RhbmNl
T2ZzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRl
eCA9PSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLnNpemUoKSk7CkBAIC05MDksNiArOTExLDcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBw
YXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlz
LCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0
Y2hCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1
ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAppbmRleCA2NDQwZmYyNDEwZjAzNzJkMWI1ZmI3ZjA1NzdmZDcwZjQ5ZTIw
NTU4Li5mMGUwZmVjMmVmYzU0MmM1YWU5ZjljMjg5MjcxMjU4MWVmNWY4ZDI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKQEAgLTIyNSwyOCArMjI1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRl
Q29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9p
ZCBjb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9i
eXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0g
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihs
b2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBzdGF0aWMgdm9pZCBjb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2lu
ZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9Ci0KICAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7
CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwpAQCAtMjY4LDEwICsyNDYsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBp
bGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJl
dHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
UHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwg
Q2FjaGVhYmxlSWRlbnRpZmllcik7CiAKQEAgLTM4MiwzOCArMzU2LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5
dGVjb2RlKTsKIAogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChS
ZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqKTsK
KyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShB
cnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNT
cGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAgCi0gICAgICAgIEpJVEFycmF5TW9k
ZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAgICAgICAvLyBQ
cm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5k
ZWNpbmcgdHlwZS4KLSAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9h
ZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKLSAgICAgICAgLy8gemVyby1leHRlbmRl
ZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLgot
ICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEludDMyUHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNv
ZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgSW50MzJTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBEb3VibGVTaGFwZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1p
dEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBM
aXN0IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBCeVZhbEluZm8qLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNT
aGFwZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyopOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3Qg
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlW
YWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAg
LTEwNjQsNiArMTAwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SklUR2V0
QnlWYWxHZW5lcmF0b3I+IG1fZ2V0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yPiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgICAgIFZlY3RvcjxKSVRQ
dXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRzOworICAgICAgICBWZWN0b3I8SklUUHV0QnlWYWxH
ZW5lcmF0b3I+IG1fcHV0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUSW5CeUlkR2VuZXJhdG9y
PiBtX2luQnlJZHM7CiAgICAgICAgIFZlY3RvcjxKSVRJbkJ5VmFsR2VuZXJhdG9yPiBtX2luQnlW
YWxzOwogICAgICAgICBWZWN0b3I8SklURGVsQnlJZEdlbmVyYXRvcj4gbV9kZWxCeUlkczsKQEAg
LTEwOTEsNiArMTAzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2dl
dEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRXaXRo
VGhpc0luZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXgg
eyBVSU5UX01BWCB9OworICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5VmFsSW5kZXggeyBVSU5UX01B
WCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlJZEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAg
ICAgdW5zaWduZWQgbV9pbkJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25l
ZCBtX2RlbEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRleCA2OWJmMWExYzNm
OGExYTM5MTY5YzZkMzk5YzJiMGM2NzZjODhjZjY0Li40ZmFlNWFkNjcxZmQwZWI1ZmY1NzEwNTdi
NGFkNTMwYTQwNDFjNzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIEpJVFB1dEJ5
SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRl
bnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1
dEtpbmQgcHV0S2luZCkKLSAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0
VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVy
cywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQorICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3Io
Y29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0
QnlJZCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQogICAgICAgICAs
IG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCiB7CkBA
IC0zODEsNiArMzgxLDY4IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKICAgICAgICAgbV9zdHVi
SW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOwogfQog
CitKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3Bl
cnR5LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0
dWJJbmZvR1BSLCBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQorICAgIDogQmFz
ZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5
cGUsIHVzZWRSZWdpc3RlcnMpCisgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9w
dXRLaW5kKHB1dEtpbmQpCisgICAgLCBtX2Jhc2UoYmFzZSkKKyAgICAsIG1fdmFsdWUodmFsdWUp
Cit7CisgICAgbV9zdHViSW5mby0+aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisKKyAg
ICBtX3N0dWJJbmZvLT5iYXNlR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5m
by0+cmVncy5wcm9wZXJ0eUdQUiA9IHByb3BlcnR5LnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJ
bmZvLT52YWx1ZUdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSID0gc3R1YkluZm9HUFI7CisgICAgbV9zdHViSW5mby0+bV9hcnJheVByb2ZpbGVH
UFIgPSBhcnJheVByb2ZpbGVHUFI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJ
bmZvLT5iYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZVRh
Z0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgIG1fc3R1YkluZm8tPnYucHJvcGVydHlUYWdHUFIg
PSBwcm9wZXJ0eS50YWdHUFIoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit7CisgICAgbV9zdGFy
dCA9IGppdC5sYWJlbCgpOworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkg
eworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5m
byksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOworICAgICAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKK3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKK3sKKyAgICBC
YXNlOjpmaW5hbGl6ZShmYXN0UGF0aCwgc2xvd1BhdGgsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KG1fc3RhcnQpKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpCisgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8t
PnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK30KKworVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5jdGlvbigpCit7CisgICAgc3dpdGNoIChtX3B1
dEtpbmQpIHsKKyAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgaWYgKG1fZWNt
YU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2Rl
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
OgorICAgICAgICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgQVNTRVJUKG1fZWNt
YU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29t
cGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCiBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OkpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRU
eXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgYnJhbmQsIEdQUlJlZyBzdHViSW5mb0dQUikK
ICAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4IGVlNjgxNDEwMWE4MWVi
ZDE1NWJmNGRiNjkzZmY0N2M4YTI3OGY3ZmIuLjNjZTVkMzdkMmM0MGRjOTkwNDllMTJhZDUzMTRi
ODk1ZjRjMDM0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgKQEAgLTEyOSw5ICsxMjksNyBAQCBjbGFzcyBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAKIGNs
YXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvcigpCi0gICAgICAgIDogbV9lY21hTW9k
ZShFQ01BTW9kZTo6c3RyaWN0KCkpCi0gICAgeyB9CisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigp
ID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgICAgIENvZGVCbG9j
ayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLApA
QCAtMTQyLDEwICsxNDAsNDIgQEAgY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQ
YXRoRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKLSAgICBFQ01BTW9kZSBtX2VjbWFNb2RlOworICAg
IEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKICAgICBQdXRLaW5k
IG1fcHV0S2luZDsKIH07CiAKK2NsYXNzIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKKyAgICB1c2luZyBCYXNlID0gSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3I7CitwdWJsaWM6CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoKSA9IGRl
ZmF1bHQ7CisKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigKKyAgICAgICAgQ29kZUJsb2NrKiwg
SklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJlZyBhcnJheVByb2ZpbGVH
UFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNNQU1vZGUsIFB1dEtpbmQpOworCisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3Nsb3dQYXRoSnVtcC5tX2p1bXAuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3Nsb3dQ
YXRoSnVtcC5tX2p1bXA7CisgICAgfQorCisgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CisKKyAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKworICAgIFZfSklUT3Bl
cmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOworCitwcml2YXRlOgorICAgIEVDTUFN
b2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKKyAgICBQdXRLaW5kIG1fcHV0
S2luZDsKKworICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVl
OworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7Cit9OworCiBjbGFzcyBKSVREZWxCeVZh
bEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiAgICAg
dXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOwogcHVibGljOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCA3NzQ0YjUwODM3YWVhN2JhMDg1YTAxMzQ1
ZmJiZjJiNjhiZjBkNDI1Li45OGZkMDBmMGQ1NzFhNTljYjYyMmE0MWE0ZjczMDNhOWQzZmM3OThk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMzU0LDYgKzM1NCwx
NCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZQogICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOwogfQogCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklE
IGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBsb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhh
cnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlE
KCkpKTsKKyAgICB9Cit9CisKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3Jl
VG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7CiAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9s
ZSgpKTsKQEAgLTM2NCwyNCArMzcyLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmkKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk91dE9mQm91bmRz
KCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5
UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJvZmlsZVNhdyA9IFtdIChBcnJh
eU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KSB7Ci0gICAgICAgIHJl
dHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJyYXlNb2RlcywgY2Fw
YWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxv
Y2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUt
Pm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJy
YXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklURG91YmxlOwotICAgIGlm
IChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCi0gICAgICAgIHJldHVy
biBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEFycmF5U3Rv
cmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKLSAgICByZXR1cm4g
SklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4ZDc3NWJlY2M3MWY4MTkyNGNi
OTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRhOTcxOWEyOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlm
IChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBp
ZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1
dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5m
bywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChz
dHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVu
dGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtp
bmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywg
UHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChz
dHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVu
dGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRL
aW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtp
bmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1
dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
UHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBl
ID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAg
ICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRT
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwg
cHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwor
ICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2Jq
ZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlL
aW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwog
fQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSgogICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8t
PmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmll
cikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8s
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICByZXBhdGNoUHV0
QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRl
bnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2Rl
IGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBz
dWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsKICAgICAgICAg
aWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBw
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAg
ICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVj
dCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1cm47Ci0gICAg
fSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3Vu
ZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBp
ZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBv
YmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAo
IUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0
KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlW
YWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAg
ICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xv
dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1
ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGlj
IHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vi
c2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAK
ICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcg
Kzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICAgICAg
aWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9m
Qm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsx
MDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQ
YXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0
LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBl
Y21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVj
dEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJs
ZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAh
PSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQog
ICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0
LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdp
dGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNs
b3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVz
dWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1
dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2Rl
KQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mg
d29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldy
aXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1
cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRl
Y29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmpl
Y3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0
cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1v
ZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpj
b21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgp
KSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgewor
ICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAg
ICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGF0Y2hB
cnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlw
dCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2Ug
aGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3Qg
ZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZt
KS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVu
dGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlL
ZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAg
ICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlz
U3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZh
bHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlm
aWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAg
ICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5
dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0
aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3RE
aXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmlj
IHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2Vs
bChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlw
dC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21t
b25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOwor
ICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlw
dC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hp
bmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWws
IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBP
cHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0
aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cg
cGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3
ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRo
aXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2Jz
ZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4g
V2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQg
aXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAp
Ci0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0
cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVS
Tl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAg
ICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8v
IERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAg
ICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVy
aWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNt
YU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9m
aWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogb2Jq
ZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAg
ICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRp
b25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRp
bWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2Zp
bGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQg
ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSog
cHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZh
bEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwog
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwot
ICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAg
ICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAg
ICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1v
ZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFz
ZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywg
c3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
ICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgSklUOjpj
b21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVz
dWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1
dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8v
IElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVy
Y2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgot
ICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0
aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAg
ICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNl
bGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJs
ZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVV
cCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAg
IGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNv
ZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUp
OwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlm
IChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGly
ZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRp
cmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMg
cHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxs
KHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0
LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAg
ICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJp
Y3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3Jl
UHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJl
Y3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAg
ICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0
dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAh
PSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0g
T3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNs
b3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3Vy
ZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2Vz
IHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMs
IHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8g
b2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhp
Yy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1
bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0g
MTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRC
eVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUs
IGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywg
b2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJO
X0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAg
IGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8g
RG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQ
YXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
R2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVl
LCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwot
ICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlw
dCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1p
emUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQog
CitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
LUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9k
ZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VW
YWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1
YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZh
bChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNN
QU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7
CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlw
dCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRC
eVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUs
IGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1
ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwor
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAg
ICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGds
b2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmls
ZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAyNTg0ZTk5NWU0NjZkZTk0YTli
MjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0YmU4M2UwNmJlMDYyNTdiZmMy
OWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAt
MjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVj
a1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
QnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8q
LCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJ
bmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
LCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2Jh
bE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNTY2OGRmYmU0MWQxMmE5MjI0YTQzYzA4ODEz
NGUzY2M1Yzg0Y2M3ZS4uY2VhMTBhMWRlM2FhNjViYTRhNmRjMTE0MDE0ZWI1NWEyZWM0MjYzMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
QEAgLTQzOCwxNzcgKzQzOCwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQ
dXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5k
OjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAgICBpZiAo
cHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIoZ2V0T3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJvcGVydHlOYW1l
SXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGJyYW5jaElm
SW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFs
SW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAg
ICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOwotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlZSBjb21t
ZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwg
cmVnVDEpOwotICAgIH0KLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QyLCBwcm9maWxlKTsKLQotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMg
aW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJl
Z1QzKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCBy
ZWdUNCk7CiAKLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxl
KTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8p
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgcmVnVDQsIGVjbWFNb2RlLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFs
SW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAg
IAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAg
ICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRy
ZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGlu
ZGV4aW5nU2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwo
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdU
MywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZO
b3RJbnQzMihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJl
Z1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMyk7Ci0gICAgICAg
IG1vdmU2NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAg
ICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWln
aHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgot
ICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0
KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBD
UkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmls
ZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVn
VDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5r
VG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6
SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVj
dFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VT
aGFwZSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+
bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAg
IGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNo
YXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkp
KTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAg
ZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVt
VmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJl
c3VsdCwgdGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBz
dG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgp
KSk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtU
byhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fcHV0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNs
b3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNp
emUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5
NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYxLDEyICs1MTYsMTUgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
ICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAg
ICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc0LDE2ICs1MzIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsK
KworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02OTQsMjggKzU1MCwy
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIz
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHByb2ZpbGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09w
ZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAg
ICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTczNiwxOCArNTkwLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0g
YXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1l
bnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7
CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQ
Uiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlv
bih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGpp
dC5yZXQoKTsKIApAQCAtODA5LDEzICs2NjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0g
YXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50
R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNl
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
dmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9H
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpA
QCAtODUxLDE0ICs3MDUsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBh
cmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVj
dEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+
KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5m
b0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkwLDgyICszMTQ0LDYgQEAgdm9pZCBKSVQ6OmVt
aXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRj
aCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAg
IG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtG
b3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUo
YXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0
ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXpl
IEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4K
LSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwg
bnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAg
IGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNv
ZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09
IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxh
c3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICgh
aXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0
dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwg
cmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2Ugewot
ICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJU
YWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJu
QWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRU
eXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihi
eVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZv
LT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDog
b3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBp
cyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRp
b25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0
aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0
dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDcsMjIzICszMTg1LDYgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2lu
ZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1
dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlf
dmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigp
OwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0g
ICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2Rl
LCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6
OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZv
LT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFs
SW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQot
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4
Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVh
ckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAg
IGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChj
YWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZy
b20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZl
ciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNo
ZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51
aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1
cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdl
bi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24g
PSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0K
LS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRp
b24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBl
eHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyos
IFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxh
dGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxl
SWRlbnRpZmllcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdU
MjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0g
ICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVT
Y3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNl
bmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwot
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0g
YnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFy
cmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5
VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAg
ICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAg
bG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
LCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJv
cGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3Bl
Y2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGlu
Qm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQo
dmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ug
d291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQg
dGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2Ji
ZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRh
ZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2Ny
YXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6Omlz
U2lnbmVkKHR5cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JF
cXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRv
b0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigw
eGZmKSk7Ci0gICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAg
ICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOwotICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNs
YW1wZWQubGluayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0g
ICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAg
ICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNPbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2
KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2Ny
YXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7
Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxh
dGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsK
LSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAg
UmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0
Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAg
Ci0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
ZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8g
aXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0z
Mih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJz
b2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlw
ZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUo
dHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2Zp
bGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
anVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAg
ICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAg
Y29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJl
YWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJl
clRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2Ny
YXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExv
YWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2Fz
ZSA9IGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAg
ICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0g
ICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsK
LSAgICByZWFkeS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUg
bG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUg
c2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9y
KCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZh
bHNlKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0
OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAg
ICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURv
dWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IGI5OGJmZWNlZGFhNTU2MDFmOTVh
ODhiZWRhNjFiMDlmMWEzNDM0NzEuLjgxYTMxZTYwODY5Mzg3NzE2ZGJhZGI0OTZjYzk3YzYyNGE4
NGFlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcApAQCAtNDY2LDE1MCArNDY2LDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBl
bWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBh
dGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdElu
ZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBw
cm9maWxlKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGlu
ZT8KLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEsIFRydXN0ZWRJ
bW0zMihDb3B5T25Xcml0ZSkpKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spLCByZWdUMSk7Ci0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJh
eU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFs
SW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlW
YWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5
cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9
IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRU
eXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAg
IFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtp
bmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFw
ZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAg
ZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBl
KSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9y
ZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdU
MSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJl
Z1QzKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAg
IEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAo
KTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUo
cmVnVDAsIHJlZ1QxLCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3Jl
RG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAg
IAotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMiwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVS
ZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1
cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVn
VDMsIHJlZ1QyKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1Q2KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDYsIHJlZ1Q3KTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAK
LSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsK
LSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdU
NSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZywgZWNtYU1vZGUsIHB1dEtpbmQpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgSnVtcCBlbXB0
eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAg
IAotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVn
VDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOyAv
LyB0YWcKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMp
OwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwot
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxv
dywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7Ci0gICAgCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIHJldHVy
biBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29k
ZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtNjE5LDEyICs0OTcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFN
b2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewog
ICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAg
ICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkK
QEAgLTYzMiwyMSArNTEzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQog
ICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOworCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCisKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwogICAgIC8vIFRoZSByZWdpc3RlciBz
ZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBB
Uk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMu
Ci0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0
eSwgcmVnVDMsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9w
ZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5B
ZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVS
ZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEwZjM1
ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQxOTQzZjhj
ODFkN2YyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4LDUz
ICs1NjgsOTQgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwog
fQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3Qg
UHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAg
IHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsK
LSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6
Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRCeUtp
bmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtp
bmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgor
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2lu
IHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1
dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUp
CitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQg
cHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0g
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwot
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZTsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlk
OgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3RE
aXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAg
IC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQor
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAt
NjgyLDggKzcyMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVy
YXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlJZFNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0
ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2Vy
LCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlO
YW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwg
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNs
b3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5
KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3Vs
dC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkg
PyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRC
eUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0Qnko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9
PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtp
bmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5k
ZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlND
ZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNz
SW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAg
ICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQx
NjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxv
YXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElD
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2Ug
VHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGlu
Z1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAg
ICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93
KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hB
cnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAo
dHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRl
eCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCkBAIC05ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
CkBAIC0xNzU2LDI4ICsxODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQog
fQogCi12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5n
IEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpOwotICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHVi
SW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1
bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0
aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUp
OworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1Yklu
Zm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5k
OjpCeVZhbDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGlt
aXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0Nh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2Vu
ZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJl
c2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgRGVsQnlLaW5kIGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMx
OWYwMmQ0ZDQwMTk1ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRh
MjNkOWVjMmRkNDhjZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
CkBAIC00Myw2ICs0MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5h
bWVCeUlkLAogfTsKIAorZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlW
YWwsCit9OworCiBlbnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApA
QCAtNTYsNyArNjEsOCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJy
YXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNW
YWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29u
c3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCBy
ZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRCeUtpbmQsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1v
ZGUpOwogdm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2Jq
ZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2
YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjks
NyArNzUsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwog
dm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhp
Y0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFy
aWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBH
ZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEJ5S2luZCk7CiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBEZWxCeUtpbmQpOwogdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVh
YzVjNDJkZDNiLi43MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgK
QEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlz
IGEgc2V0IG9mIGFsaWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8g
YmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJ
ZFN0YXR1cy5jcHApCisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0
dXMuY3BwIGFuZCBQdXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29k
ZXMgZXhwZWN0aW5nIHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRo
ZSBDTG9vcCBpbXBsZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBz
ZXQgdXAgdGhpcwogLy8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436174</attachid>
            <date>2021-08-23 02:57:55 -0700</date>
            <delta_ts>2021-08-23 03:09:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823025754.patch</filename>
            <type>text/plain</type>
            <size>307841</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5mNjI0NmE0ZTU2YTRiMmE3
YjhhMTAxNDY5NGFkYTBkZmZkNDMwM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTcgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVj
dHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3Rv
cmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0
QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBz
KToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRl
ZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNT
dGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01h
eUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICog
aml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKToK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQv
SklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXplKToKKyAg
ICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OnRyeVB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3Vz
UHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVk
QXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5j
dGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBh
dGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5C
eSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1
dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1Jl
cGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEt
MDgtMjIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlND
XSBSZW1vdmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZh
N2EuLjMyM2Q4YTQwZTFmNmUyM2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3
RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0
Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0
YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjND
NiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4
NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBD
MzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDEx
IEBACiAJCTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0
dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0
QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3Rh
dHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1
RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFy
aWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZl
cmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRS
ZWZlcmVuY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2
OTUsMTAgQEAKIAkJCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uaCAqLywKIAkJCQkwRjE1Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNw
cCAqLywKIAkJCQkwRjE1Q0QyMTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8s
Ci0JCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAot
CQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJ
MEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkw
RjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkz
MzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJB
RTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNv
cmRlZFN0YXR1c2VzLmNwcCAqLywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVj
b3JkZWRTdGF0dXNlcy5oICovLApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJF
MUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
VmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8q
IFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYw
NDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2
QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTlj
MzAyMGQuLjcwNzdlZjlhZTMxMTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFt
Q29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Q
cm94eWFibGVBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9S
ZWNvcmRlZFN0YXR1c2VzLmNwcAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVj
b2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3
ZTY5ODI4MGMzNWI2Li5jZTJiOGZhYjA3ZTYyZjBlZmI2MjkxYzk5MzFjZjAwMzQzYTYzZjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05
OSw2ICs5OSwxOSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRp
Z3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWlu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVu
dGlmaWVyQ2hlY2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MzI2LDYgKzM1MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVN
YXRjaCgpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJp
bmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
NzgsNiArNDE3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUs
MTEgKzQ3NywyNCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
IGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRT
dHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBi
cmVhazsKICAgICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9l
c0NhbGxzKFZNJiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBj
b25zCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBm
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwx
OSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIp
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3Ro
ZXIudHlwZSgpID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpA
QCAtOTYxLDYgKzEwNjUsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAog
ICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAg
IGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsxMTY2LDgg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNo
R1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwogCkBAIC0xMTQ1LDYgKzEyNTMsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJl
Z3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTExOTksMTUg
KzEzMDksMTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsK
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQpAQCAtMTIyNywxNiArMTMzNiwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAogICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5k
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKIAogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwg
c2NyYXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZh
bHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElm
RW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQu
YnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNo
R1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9h
ZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBK
U1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0
eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAg
ICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBA
IC0xMjYyLDIxICsxMzcxLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRG
UFJSZWcpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFz
ZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQp
LCBzdGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5j
aElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAg
ICAgaml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2Fk
VmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAg
ICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRj
aEdQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7Cisg
ICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2Ny
YXRjaDNHUFIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwg
dmFsdWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM5NSwyNzMgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAg
IHN0YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0
ZXJzKCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFm
YWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygm
aml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3Bw
aW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUu
ZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAg
ICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBh
bGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBk
b25lIGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3Qz
MihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKENvcHlPbldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3Bl
cnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsK
KworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAg
IGF1dG8gcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2Vy
dmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0
LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNl
KTsKKyAgICAgICAgfTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0
OworICAgICAgICBpZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAg
ICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3Jh
Z2VTaGFwZSkpKTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KEND
YWxsSGVscGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSkpKTsKKyNlbHNlCisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIEpTVmFsdWU6Om9mZnNldE9mVGFnKCkpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBl
eHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9
IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gRG91Ymxl
U2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3Vv
dXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBw
ZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3RlZFNoYXBlKSkpOworCisgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZTogewor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3RJbnQubGlu
aygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMkdQUiwg
c3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQo
aml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUs
IHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworCisgICAgICAgICAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAg
ICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHBy
b3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
dmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVC
YXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsK
ICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAgICAgIGlzRW1w
dHkubGluaygmaml0KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkpOworICAg
ICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rv
ck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAg
ICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQp
OworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFu
ZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7
CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhq
aXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFt
cGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAg
ICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQg
YWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJ
bnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5z
Y3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNl
ID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91
YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNl
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNU
b0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRl
LnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAg
ICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0
aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBl
bmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwg
c2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlm
IChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBz
Y3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0g
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAg
aml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNw
YWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAg
aml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAg
ICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1
YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAg
ICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVh
dGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsK
KyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAg
IHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xh
bXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0
Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZl
cnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
Rm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7Cisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
LnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0g
SW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAg
IAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CkBAIC0xODk2LDYgKzIyNjQsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlk
R1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQ
Uik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVH
UFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKIAogICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwpAQCAtMjA1OCw2ICsyNDI4LDggQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlKCkt
PnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwpA
QCAtMjE4Myw2ICsyNTU1LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVja1ByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERv
dWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgLy8g
VGhlc2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRo
ZSBndWFyZCBpcyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBz
dXJlIHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBz
aW5jZSB0aGV5CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tz
LgpAQCAtMjE5NiwyMiArMjU4MSwzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNlOjp0b1R5
cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vz
c1R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToK
ICAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAgICAgICAg
IHJldHVybiBUeXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAgICByZXR1
cm4gVHlwZUZsb2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjI4NCw2ICsyNjc4LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVTaGFy
ZWQoY29uc3QgQWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdM
b2FkOgogICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNDE5Yzk5
YzkwZjQzOTAxODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uNTYzYTE1NTJhZTQyMTY0NDA0NmQw
YWE0MWQyM2I2YWRkNWRiNjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2UgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQs
CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIEluZGV4ZWRT
dHJpbmdMb2FkCisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRleGVkSW50
MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRleGVkQ29u
dGlndW91c1N0b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisgICAgICAg
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlLAor
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmUsCiAgICAgfTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKQEAgLTM1MywxMiArMzY2
LDEzIEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICBzdHJ1Y3QgS2V5IHsKICAg
ICAgICAgICAgIEtleSgpID0gZGVmYXVsdDsKIAotICAgICAgICAgICAgS2V5KEdQUlJlZyBiYXNl
R1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BS
LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0
aW5lKiB3cmFwcGVkKQorICAgICAgICAgICAgS2V5KEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFs
dWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYXJyYXlQ
cm9maWxlR1BSLCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhpY0FjY2Vzc0pJ
VFN0dWJSb3V0aW5lKiB3cmFwcGVkKQogICAgICAgICAgICAgICAgIDogbV93cmFwcGVkKHdyYXBw
ZWQpCiAgICAgICAgICAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKICAgICAgICAgICAgICAg
ICAsIG1fdmFsdWVHUFIodmFsdWVHUFIpCiAgICAgICAgICAgICAgICAgLCBtX2V4dHJhR1BSKGV4
dHJhR1BSKQogICAgICAgICAgICAgICAgICwgbV9zdHViSW5mb0dQUihzdHViSW5mb0dQUikKKyAg
ICAgICAgICAgICAgICAsIG1fYXJyYXlQcm9maWxlR1BSKGFycmF5UHJvZmlsZUdQUikKICAgICAg
ICAgICAgICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQogICAgICAgICAgICAg
eyB9CiAKQEAgLTM3NSw2ICszODksNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAg
ICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BSID09IGIubV92YWx1ZUdQUgogICAgICAgICAg
ICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0gYi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAg
ICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBiLm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAg
ICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQUiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAg
ICAgICAgICAgICAgICAgICAgICYmIGEubV91c2VkUmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0
ZXJzOwogICAgICAgICAgICAgfQogCkBAIC0zODMsNiArMzk4LDcgQEAgY2xhc3MgU2hhcmVkSklU
U3R1YlNldCB7CiAgICAgICAgICAgICBHUFJSZWcgbV92YWx1ZUdQUjsKICAgICAgICAgICAgIEdQ
UlJlZyBtX2V4dHJhR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1fc3R1YkluZm9HUFI7CisgICAg
ICAgICAgICBHUFJSZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIH07CiAKQEAgLTQxNiw2ICs0MzIsNyBAQCBjbGFz
cyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BS
ID09IGIubV92YWx1ZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0g
Yi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBi
Lm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQ
UiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV91c2Vk
UmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgb3JkZXJpbmcgb2YgY2FzZXMgZG9lcyBub3QgbWF0dGVyIGZvciBzaGFyaW5n
IGNhcGFiaWxpdGllcy4KICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHBvdGVudGlhbGx5
IGluY3JlYXNlIHN1Y2Nlc3MgcmF0ZSBieSBtYWtpbmcgdGhpcyBjb21wYXJpc29uIC8gaGFzaGlu
ZyBub24gb3JkZXJpbmcgc2Vuc2l0aXZlLgpAQCAtNDQ1LDYgKzQ2Miw3IEBAIGNsYXNzIFNoYXJl
ZEpJVFN0dWJTZXQgewogICAgICAgICBHUFJSZWcgbV92YWx1ZUdQUjsKICAgICAgICAgR1BSUmVn
IG1fZXh0cmFHUFI7CiAgICAgICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSOworICAgICAgICBHUFJS
ZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8UmVmUHRyPEFjY2Vzc0Nhc2U+PiYgbV9jYXNl
czsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8U3RydWN0dXJlSUQ+JiBtX3dlYWtTdHJ1Y3R1
cmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCmlu
ZGV4IDZkYzdiMGU1NDQ3ZmUwNjBkYmNiZDI0ZDk5MDk3NTY1NzlmYzY1NzQuLjkxZGE4ZjNlZmY5
MmZjM2E4OTU3MGQ3NWE0YjkxM2JkMjYzMmNjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKQEAgLTIwOCw2ICsyMDgsOSBAQCBjbGFzcyBBcnJh
eVByb2ZpbGUgewogICAgIEFycmF5TW9kZXMqIGFkZHJlc3NPZkFycmF5TW9kZXMoKSB7IHJldHVy
biAmbV9vYnNlcnZlZEFycmF5TW9kZXM7IH0KICAgICBib29sKiBhZGRyZXNzT2ZNYXlTdG9yZVRv
SG9sZSgpIHsgcmV0dXJuICZtX21heVN0b3JlVG9Ib2xlOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlQcm9maWxlLCBtX21heVN0b3JlVG9Ib2xlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
UHJvZmlsZSwgbV9sYXN0U2VlblN0cnVjdHVyZUlEKTsgfQorCiAgICAgdm9pZCBzZXRPdXRPZkJv
dW5kcygpIHsgbV9vdXRPZkJvdW5kcyA9IHRydWU7IH0KICAgICBib29sKiBhZGRyZXNzT2ZPdXRP
ZkJvdW5kcygpIHsgcmV0dXJuICZtX291dE9mQm91bmRzOyB9CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5j
cHAKaW5kZXggNzY3MWQ4N2IxZWE3NDlkYzM0NTZmNzc2NWFjMDZjNGE4YmNmYjJiMS4uYzAyNWE3
YmY2NTE5NGJkYTRlODIxNTFkOWNiM2YyOTY3OGRhOTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcApA
QCAtMTQxLDYgKzE0MSw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zCiAgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVSZWdzKTsKICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BS
KTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAg
IGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogCiAgICAgR1BSUmVnIHBhcmFtQmFzZUdQUiA9
IEludmFsaWRHUFJSZWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1
c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUzYjg0OTE3YzQ4M2Q5NTAuLjdh
MDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNz
IENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgR2V0QnlTdGF0dXM7CiBj
bGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsKK2NsYXNzIFB1dEJ5U3RhdHVz
OwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVj
dCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJQ1N0YXR1cyB7CiAgICAgQ2Fs
bExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAgICAgR2V0QnlTdGF0dXMqIGdl
dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBpblN0YXR1cyB7IG51bGxwdHIg
fTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07CisgICAgUHV0QnlT
dGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxldGVCeVN0YXR1cyogZGVsZXRl
U3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAppbmRleCA0ODQxMDEzOWRjMmY4YzBkNWM4MGEyZmY5MDVj
M2FhNmExMzVkZmIyLi5kYjc3N2U5ZWRhNGUyZmY5ZGY4ZGI5ZmEwYzc5MGE2ZWVkNWVlZTBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcApA
QCAtMjE4LDYgKzIxOCw4IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEdQUlJlZyBnZXRTY3JhdGNo
UmVnaXN0ZXIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogI2VuZGlmCiAgICAgaWYgKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEyZjMx
ZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDBkNmExZjlkYTU4MjUyMDU1NGFhYzM0
ZWMxYTQ0ZTQyOWFmODY0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC00OTQsNiArNDk0LDggQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2MKICNlbmRpZgogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9
IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7
CiAKICAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwogCkBAIC04MTAsNiArODEyLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICAgICAgICAg
ICAgIHN0dWJJbmZvLnZhbHVlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ucmVncy50aGlzR1BS
LAogICAgICAgICAgICAgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwKKyAgICAgICAgICAgIHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8udXNlZFJlZ2lzdGVy
cywKICAgICAgICAgICAgIGtleXMsCiAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlcywKQEAgLTg0
Niw3ICs4NDksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgaWYgKGNhbkJlU2hhcmVkKQotICAgICAgICAgICAg
dm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHVi
SW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBz
dHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgp
KSk7CisgICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1YlNl
dDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHViSW5m
by5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGZpbmlzaENvZGVHZW5lcmF0aW9uKFdURk1vdmUoc3R1YikpOwpAQCAtMTAy
Miw2ICsxMDI1LDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3Ry
aW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1
ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUg
IkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgi
Ci0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0g
ICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0m
IHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7
Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55
IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0
IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBo
YXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50Lgot
ICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAo
IXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJ
RCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkg
ewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2
bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlk
KTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5m
bzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAg
ICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJv
ZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVT
RURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1Yklu
Zm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAg
ICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9
IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZv
KTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0
ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVz
ZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nl
c3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFj
Y2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxl
OiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJ
bmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxs
TGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlh
bnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAg
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxp
bmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0
RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29k
ZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0
YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2lu
KTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
YmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGlu
ZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJl
c3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRG
cm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBj
YWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQu
aXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICBy
ZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
Y29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlk
LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNl
SW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRT
dGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0
dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8g
c2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNo
IGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJv
dyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmlu
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
TWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFu
cyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGlu
ZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3Qg
Y3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAg
ICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0
aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8v
IFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFBy
aXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVy
IGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAg
ICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxk
LiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlv
biBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRL
aW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEg
dHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAg
Ly8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAg
IC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBj
b3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1
cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGll
cyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVj
dCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0g
ICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9w
dGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlv
biBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJh
bnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAg
Ym9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNl
bmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlm
IChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlm
IChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVt
cGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAo
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFy
aWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5
SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRp
b24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7
Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1h
a2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAK
LSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1w
bGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBl
bmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAg
ICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBm
b3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFu
dC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lk
IFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmlu
dCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2Fz
ZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAi
KSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoK
LSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRG
bGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZv
cm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMK
LSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9J
bmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0
dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQ
YXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0
IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3Jt
YXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0g
TWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVz
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxl
KQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0
dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBj
b250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2Vu
ZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1h
dGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24o
KSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4m
IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXpl
KFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAg
Ci0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQp
Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAg
ICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2
b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFm
YTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNs
dWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6
OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5
SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYg
UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17
Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIu
bV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVy
ZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zm
c2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0g
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVz
ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAg
IHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
b2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsK
LSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50
IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJl
c3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZN
b3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUq
IFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1f
b2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3Ry
dWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewot
ICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAg
bV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0
QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChr
aW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5k
KCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkg
ewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewot
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJp
YW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRy
YW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5l
d1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0g
b3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3Ro
ZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBp
ZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQg
PSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAg
ICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0
aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0
aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0g
ICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlk
VmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwot
ICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBh
bnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAg
IGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJl
Lm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7
Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lm
Q2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZp
bmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2
bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZt
LmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZp
bmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAg
IG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAi
LCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQo
KSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5z
aXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFu
dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5k
IHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9u
LAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
Ci0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
Ci0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwot
ICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVy
ZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29s
IHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2lj
cyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0
aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29u
c3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0
ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAg
fQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2Nh
bGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZN
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tp
bmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xk
U3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0g
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NmJjY2E2N2NmMTg2YzQ2YmRhMDMzMDZiYTA0M2MwNDBmYTdj
YTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUg
IkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6
OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHBy
b2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVk
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lk
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8g
aGF2ZSBhIGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2
YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMg
aXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8g
SUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisK
KyAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CisgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
IGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9u
U2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIs
IHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNp
ZiBFTkFCTEUoSklUKQorUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29k
ZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BB
UkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmln
aW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1Yklu
Zm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoc3VtbWFyeSk7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7Cisg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQor
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAgICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFj
Y2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAg
ICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVy
KCksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
YXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vzcy5pZGVudGlmaWVy
KCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2
YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVz
IGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVy
ZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0
YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRl
RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vz
cy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Cit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywg
Ynl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNp
dGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29u
dGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMg
PSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNz
ID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAg
ICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4
aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0
QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5k
ZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGly
ZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5k
ZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKwor
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAg
ICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVz
dWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJp
YnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQ
cml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFu
cyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVl
ZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4K
KyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1
dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBj
YW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0
CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJl
Y2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5v
dCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAg
ICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lz
IGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0
aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5
IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9u
IGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFT
U0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Cisg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAg
ICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0
aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
KyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBj
b25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAg
cmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCiti
b29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBNYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9zdGF0
ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJpYW50
c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6c2xvd1Zl
cnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0
QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJ
ZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZp
bmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlT
dGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgeworICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQ
YXRoKTsKKyAgICB9OworICAgIAorICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9J
bmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2lt
cGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgeworICAg
ICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBN
YWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgfQorICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1w
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFu
dHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQor
ICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworICAg
IGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRp
b247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAg
ICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1f
dmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCIoTWFr
ZXNDYWxscykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzJhMWM3
M2M4ZjQxY2ExOTJlNThkNGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhp
dEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNz
IFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJ
dCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3Jt
YXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUg
a2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRh
a2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtu
b3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzCisg
ICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9y
bWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3Rh
dGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8
IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5
U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChz
dW1tYXJ5KSB7CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgor
ICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0
aDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRh
a2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2Fs
bHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAg
ICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNv
ZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0
dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxk
UHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29u
dGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4p
OworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9J
bmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsg
fQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJz
aW9uKCkgY29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAx
PiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5n
bGVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0
aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4
KTsKKyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7Cisg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVj
dG9yPFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlW
YXJpYW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQorewor
ICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5t
X2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRl
bnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1
dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJp
YW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmll
cikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtT
dGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAh
PSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2Fy
eSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFj
ZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFy
aWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtp
bmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
aWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAg
ICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJh
bnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsK
KyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNp
dGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5z
aXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2Vk
Q29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlv
blNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVz
IHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExp
bmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9u
U2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFt
ZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25l
U2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExp
bmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2Up
Cit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFj
ZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9v
ZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFT
U0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2Uu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVy
Z2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQg
YSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGls
ZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0
CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhl
IHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNT
dG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5t
X29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVj
dHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9u
ZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQorewor
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVt
cHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAg
ICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAg
b3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRl
eHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIs
ICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZh
cmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtT
dGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBS
ZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAg
IAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
ICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQor
ICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVy
KFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29u
c3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2Fj
aGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xk
U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVj
dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24g
fHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVy
biBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5z
aXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBm
b3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlz
IGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Qg
eyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1w
bGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxM
aW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAh
PSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVy
ZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAg
IEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVy
ZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVs
bHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcu
LmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYy
LDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0
YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewot
ICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0
YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0
dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0
cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxl
dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5
ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3
IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0
YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMq
IGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRk
SW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERl
bGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
RGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsK
ICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1
cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVf
cHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNl
YjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3
ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJs
b2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVz
ZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJ
RChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAg
ICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxv
Y2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4
ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmU2N2JjMTA4YmUzMjBkZDZkMjU5ZTc3YzgxYjlkNTFjNDVj
ZjU4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFs
LAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAg
ICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtMzY1LDYgKzM2Niw3IEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgR1BSUmVnIGJyYW5kR1BSOwogICAgIH0gcmVn
czsKICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJS
ZWcgbV9hcnJheVByb2ZpbGVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFI7CiAgICAgLy8gRklYTUU6IFszMi1iaXRzXSBD
aGVjayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMx
N2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3Ry
dWN0b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0
dXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJh
bmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0
cnVjdHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmls
dGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3
ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1Zh
bHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVh
bGx5IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7
CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAg
ICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00
MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRl
KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWRE
aXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBh
dXRvIHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJ
ZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5v
bmUoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlm
aWVyKCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LAogICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAg
ICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2Qp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdT
dHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAt
NDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRP
SzoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAg
LTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0
ZSgpKQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9z
dHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1
cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQy
MGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUz
ODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xh
c3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJ
ZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi43ZjQwMmU2OTdm
OWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRmMjIzNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hl
Y2twb2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03
NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUg
IlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBC
eXRlQ29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAg
Ci0gICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3Jt
IG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQg
YW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAg
IE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7
CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0
dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNE
aXJlY3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFN
b2RlKTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5
U3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5k
ZXgsIEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAg
ICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1
dEtpbmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2
YXRlRmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUp
OwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAg
ICAgICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4g
b25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAg
ICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUg
b24gdGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlv
dXNseSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0
cnVjdHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVt
ZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0
YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25l
IGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdl
dEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
cmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZl
ciwgdGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRo
ZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5
Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxv
YWRlZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUq
IHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3Ry
dWN0dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
LCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24s
IE5vZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlk
KAotICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSog
dmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3Qs
IEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQog
ICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJ
bmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFw
aChwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9w
SW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAg
ICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1
cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVj
bWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVj
dCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAg
IGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlh
bnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8
ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmlu
ZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRp
ZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9w
bGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5p
c0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlv
bnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxp
bmluZ0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAg
ICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGlj
QWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNE
aXJlY3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAg
ICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0g
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAg
ICAgIGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCAr
NTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3Rh
dHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsK
KyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52
YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRp
UHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRT
dGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52
YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSks
IGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQo
cHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBw
dXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAg
Y2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCku
YWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJh
c2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwg
dmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAg
LTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2
YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7Cisg
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNl
IFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAg
ICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAg
ICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVm
YXVsdDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAg
IGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMs
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8
ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewor
ICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBP
cEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwo
KSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwg
cHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9s
eW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNp
emUoKSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlv
bnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcElu
Zm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBo
LmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwor
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZv
ciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkg
ewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsK
ICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAg
ICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNb
MF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewog
ICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJ
ZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAg
c3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
OiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJU
KHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmls
dGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwg
YmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0
aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlP
ZmZzZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0
QnlJZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3At
Pm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29k
ZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhl
IGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8g
YmVjb21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMg
bm8gaW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29t
ZSBpbmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hl
ZCBjZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
Njc3OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAg
ICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxl
QXNQdXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBi
eVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmll
ci5pc1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAg
ICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAg
ICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHBy
b3BlcnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5l
U3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCkpOworCisgICAgICAgICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0
eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgICAg
ICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBj
dXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQ
cml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUs
IHN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29t
cGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAg
ICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQp
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9w
SW5mbyhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1
NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlk
U3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3Rh
dHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAg
ICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5l
Y21hTW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVj
bWFNb2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAg
ICAgfQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNo
R2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVz
OwogICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwg
ZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0
ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3Rh
dHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlh
bnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5r
aW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0
KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTg4MTksNDUgKzg4MDgsMjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhp
dEluZGUKICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICBib29s
IGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owog
ICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgUHV0
QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVj
b2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBi
eXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJl
Y29tZXMgbnVsbC4KLSAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5m
b3JtYXRpb24uCi0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICYm
IGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29r
U2xvd1BhdGgKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAg
ICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50
aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGZyb3plbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICBpZiAoIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7
CisKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAorICAg
ICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlk
ZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50
aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9n
cmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZp
ZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9s
KCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJ
bmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkp
OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0
SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5
SWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQot
ICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVt
YmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNv
ZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA5MTY0NzBkMTdk
NTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3OTU4YjRhLi42ZjIwNGQyYzVkZTBhNjEyZjczMWM5NTdi
NDYxZGNmMzBjNGExMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaApAQCAtNTY5LDcgKzU2OSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRC
eUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKaW5kZXggODZhM2QwNzY2NGQ3ZmE5Mjc1MTI5
OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNlOWZmMGViNWRhNTEwZWMyMzQwNjQ2MmE3MWU4ODA5NTA5
NjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0
YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAppbmRleCBlYWVhZjg1ZWEyNTQxNzI1NzU1ZjQ4Y2VmZGVkZTAzYjgxYzlmYTJhLi5iODgy
NWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFkOTMyNGE0MGMxNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgs
NyArMzgsNyBAQAogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNz
IENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAK
IAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlWYXJpYW50
JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmljRmlsdGVyKFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5jb250
YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKQEAgLTUxMywxMSArNTEzLDkgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UodmFyaWFudC5pZGVudGlmaWVy
KCksIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CkBAIC0xMjEzLDcgKzEyMTEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zm
c2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNl
VmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwog
ICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTIyNCw3ICsxMjIy
LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRp
b24qIHRyYW5zaXRpb24gPSBudWxscHRyOwotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgdHJhbnNpdGlvbiA9
IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICB9
CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3Bl
cnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNh
bkV4aXQ7CiAKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIGlmIChkaWRBbGxvY2F0ZVN0b3JhZ2UpIHsKICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRl
cmZseSwKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICBpZiAoIWJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zp
bml0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgc3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgUHV0QnlTdGF0dXMgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3Ry
dWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVu
dGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCks
CiAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAg
aWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKQEAgLTE0MjQsOCArMTQyMiw4IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKIAogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
LSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJp
YW50cygpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24o
Y29uZGl0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OCw3
ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAg
ICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlW
YXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0
S2luZC5pc05vbmUoKSB8fCBwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwogICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAg
Y2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBhbHJl
YWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZv
bGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yywgc3RhdHVzKSksCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQ
dXRCeVN0YXR1cywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50
aWMsIHN0YXR1cykpLAogICAgICAgICAgICAgRWRnZShiYXNlTm9kZSkpOwogCiAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVp
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNjBmYmIxNWM1
OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2MzN2UxOGYxZS4uZTY0ODE2N2MxMTg2YmM4YzkzZjMyZThj
NTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0ZTlhNWNmMmQ1NmM2NDgzZDIyYWJiYTY2NzJhYzczODUw
OS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFjNTI0OTE1M2Y5ODZlMzk4YTI2MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yODY1LDcgKzI4NjUsNyBA
QCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJbnRy
aW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzLi4w
YWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBE
dW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVzKCkp
OwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMo
KSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAg
ICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAq
bm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRhZGF0
YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBub2Rl
LT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkx
MGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAw
YzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
Z2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0
QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxz
LCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5r
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAz
OWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2
ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIEND
YWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9p
ZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdl
bmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7Cisg
ICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdl
biwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgbV9kZWxCeUlk
cy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xv
d1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBD
Q2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1
dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0
b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5
ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIy
MGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApA
QCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRC
dXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFi
YWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4
YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3
IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQ
cml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNs
dWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nl
c3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7
CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3
cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFz
UHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRCeVN0YXR1cygpCiAgICAgewotICAgICAg
ICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3RhdHVzOworICAgICAgICByZXR1cm4gb3Ao
KSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyog
cHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkpOwotICAgICAgICByZXR1cm4gbV9vcElu
Zm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygp
KTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAK
ICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQw
Li45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQxNmVhYmViYjllMjIyMzVlMTdlOGIuLjI4
OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2JlZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAg
LTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KIAogICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2Rl
SUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgY29tcGlsZSBv
cF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGluZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4g
d2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRoaXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAg
ICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9zc2libGUgdGhhdCB3ZSBjYW5ub3QgZmlu
ZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNj
ZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJhc2VsaW5lIENvZGVCbG9jayAoQSkgaXMg
Y29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4gKEEpIGdldHMgREZHIChCKS4KLSAgICAg
ICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVjdHMgZW5vdWdoIGluZm9ybWF0aW9uIGZv
ciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1cmVTdHViSW5mbyBmcm9tIChBKSBhbmQg
Y29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxsLgotICAgICAgICAgICAgICAgIC8vIDQu
IChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNlIGl0IGlzIG5vdCBleGVjdXRlZC4gVGhl
biwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAgICAgICAgLy8gNS4gVGhlIENvZGVCbG9j
ayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28gKEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkg
ZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9jayBhZ2Fpbi4KLSAgICAgICAgICAgICAg
ICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3Ry
dWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlkIChvcmlnaW5hbGx5LCBwdXRfYnlfdmFs
KS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChBKSdzIEpJVERhdGEgaXMgY2xlYXJlZCBv
bmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRl
eCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAg
ICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0Vu
dHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKICAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2
ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNz
IE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFw
cHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5j
b21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50
OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFy
aWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1
LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFk
ZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4
MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNs
YXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
Y2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAw
ZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5
ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
QEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6
Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmlu
ZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0ZTJkNmI1ZDk5M2ViNmIuLjYwM2ZmN2IyZTUy
ZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEw
YzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODll
ODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlcklu
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBm
Li5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNz
IFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYx
YTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApA
QCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEs
NyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1
MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRj
aFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2Ug
RmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4ZWY3MTAwLi5jMzlmMmRkZjM3
NTM2MzFiMTUyODUxMWFiYzkwZTcxYTUwYTMwN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoK
ICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpA
QCAtODk1MSw3ICs4OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9y
PFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJh
c2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tp
XTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCku
c2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClb
al0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2
ICs4OTY2LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSAr
IDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFj
ZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAg
bV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZv
KCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUz
OWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3
N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0
MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xp
c3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxk
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0
YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1
cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJm
YzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMz
NmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCAr
NjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1
dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRk
QWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBt
YWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisg
ICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0
aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxm
UGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERl
bEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVh
NWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0
NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1
MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlW
YWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRC
eUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRl
eCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsK
QEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNX
aXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1f
cHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0g
bV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09
IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4
ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkw
OSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRC
eVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRz
LCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVm
ZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDY0NDBmZjI0MTBmMDM3MmQxYjVmYjdm
MDU3N2ZkNzBmNDllMjA1NTguLmYwZTBmZWMyZWZjNTQyYzVhZTlmOWMyODkyNzEyNTgxZWY1Zjhk
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0g
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIs
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0
QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
KQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0y
NjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMzgyLDM4ICszNTYsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFy
cmF5UHJvZmlsZSopOworICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9s
ZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAg
ICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdU
MiBjb250YWlucyBpbmRlY2luZyB0eXBlLgotICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUg
aXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAotICAgICAgICAv
LyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVh
ZHkgcHJvZmlsZWQuCi0gICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBJbnQzMlNoYXBlKTsKLSAgICAg
ICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dERvdWJsZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIERvdWJs
ZVNoYXBlKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
ID0gQ29udGlndW91c1NoYXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBl
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNt
YU1vZGUoT3ApOwpAQCAtMTA2NCw2ICsxMDA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAgICAgIFZlY3Rv
cjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICAg
ICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAgICAgIFZlY3Rv
cjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRJ
bkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlWYWxHZW5l
cmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2VuZXJhdG9yPiBt
X2RlbEJ5SWRzOwpAQCAtMTA5MSw2ICsxMDM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVk
IG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBt
X3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlWYWxJ
bmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5kZXggeyBVSU5U
X01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLjRmYWU1YWQ2NzFm
ZDBlYjVmZjU3MTA1N2I0YWQ1MzBhNDA0MWM3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsNyArMTQy
LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3Io
Y29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0
LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9H
UFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQo
cHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjggQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRv
cjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQog
ICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgYXJyYXlQcm9maWxl
R1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtp
bmQpCisgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1v
ZGUpCisgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwg
bV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsK
KyAgICBtX3N0dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigp
OworICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyAgICBtX3N0dWJJbmZvLT5t
X2FycmF5UHJvZmlsZUdQUiA9IGFycmF5UHJvZmlsZUdQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1
YkluZm8tPnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5w
cm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklU
UHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkK
K3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdl
bmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQ
YXRoKQoreworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRy
ID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlv
bl9HU3NpSkpDIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fcHV0S2luZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
aWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOwor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAg
ICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFr
ZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVn
IHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXgg
ZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uM2NlNWQzN2QyYzQwZGM5
OTA0OWUxMmFkNTMxNGI4OTVmNGMwMzQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNs
YXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRC
eUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAg
ICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAg
ICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFs
dWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9u
X0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1f
ZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9
OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJh
c2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAg
ICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NU
eXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVn
IGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSwgUHV0S2luZCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1NldCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIGZpbmFsaXpl
KExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5r
QnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwor
CisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CisKK3ByaXZh
dGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OworICAg
IFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNs
YXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJs
aWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDc3NDRiNTA4Mzdh
ZWE3YmEwODVhMDEzNDVmYmJmMmI2OGJmMGQ0MjUuLjk4ZmQwMGYwZDU3MWE1OWNiNjIyYTQxYTRm
NzMwM2E5ZDNmYzc5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBA
IC0zNTQsNiArMzU0LDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRlCiAgICAgbG9hZDgoQWRk
cmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIGluZGV4aW5n
VHlwZSk7CiB9CiAKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Cisg
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSkpOworICAgIH0KK30KKwogaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSkKIHsKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NP
Zk1heVN0b3JlVG9Ib2xlKCkpOwpAQCAtMzY0LDI0ICszNzIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVz
c09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VB
cnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIGF1dG8gYXJyYXlQcm9maWxl
U2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkp
IHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhh
cnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAgICB9OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1v
ZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7Ci0gICAgaWYgKGFycmF5
UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRE
b3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkK
LSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlN
b2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdl
OwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCiBBTFdBWVNfSU5MSU5FIGludDMyX3Qg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDI0ZDlmNWVkZjg3MTU4MzhkNzc1
YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2MzI4MWUzNWRmZTU1ZmFlMjA2MTAwYTE1ZGE5NzE5
YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwg
c2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9
CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1
MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplYwogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xv
dCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAK
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4
Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYgogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90
LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEz
LDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmllbGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5
cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vz
c1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBj
b2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNo
UHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJl
LCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZSk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0
dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwxNiArOTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZv
aWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNs
b3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xk
U3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGlj
IHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gKmlu
ZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBA
IHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiArOTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAg
IHJldHVybjsKLSAgICB9IAorICAgIH0KKwogICAgIGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkg
ewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxl
LT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8t
PnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVy
Q2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkp
KQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5p
c1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVy
dHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNt
YU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUg
dmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAq
bWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgp
KSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUo
KSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRo
czo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3Bl
cnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIzLDIyNiArMTAxOCwyMDYgQEAgZW51bSBjbGFzcyBP
cHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdpdmVVcCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRp
b25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0QnlW
YWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNN
QU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Ci0KLSAgICAv
LyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25S
ZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6
ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
ICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5pbmRleGluZ01vZGUoKSkp
Ci0gICAgICAgIHJldHVybiBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLQotICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotCi0gICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXph
YmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRp
bWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVG
b3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJt
aXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+
aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2Nr
ZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCwgZWNtYU1vZGUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRv
IHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdl
dCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRp
bWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICAgICAgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0
KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1i
b2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpOworICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAot
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2Vlbikgewot
ICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVk
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0g
bGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0s
IGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8t
PmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikp
CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0
QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0
aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlv
blJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElm
IHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRo
ZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWlu
LiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAg
Ly8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5
IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJl
IHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAg
Ly8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1Bh
dGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAot
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVz
dWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXAp
IHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0
YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3Bl
cmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
YnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
c3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLXN0YXRpYyBPcHRp
bWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgot
ICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBz
dHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVy
ZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERpcmVjdChhcnJheU1v
ZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgeworICAgIGlmICghaXND
b3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50
MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2
bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZSkgewog
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBhdGNoQXJy
YXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
ICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIH0KKyAgICB9
CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50
aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
LmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFi
bGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewogICAgICAgICBjb25z
dCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlv
blJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElk
PE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgUHV0S2luZDo6RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBs
aWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBl
Y21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOworCisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxT
dHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBDb21tb25TbG93
UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgp
KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXBhdGNoUHV0
QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6OkRpcmVjdCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1p
emF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXph
dGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8v
IElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5n
IHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFn
YWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAg
ICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVu
aXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5
IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAg
ICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xv
d1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIAotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1v
ZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQg
cmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkg
ewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1Mp
LCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KIAotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1
YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBkaXJlY3RQdXRCeVZh
bE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgp
KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
Yywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFN
b2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAgZGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpz
bG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVD
TUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
KworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVl
LCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHVi
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkp
OworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwot
ICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisKKyAgICBzdHViSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNP
YmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09i
amVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgZGly
ZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQs
IHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCcmFu
ZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDI1ODRl
OTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgxZDVmMTk5OTguLmVmYmQ4ODczNTQyZmMzZjRiZTgz
ZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywxNSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZQog
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7Ci1KU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyos
IEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOworCitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwogCiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRUNNQU1vZGUpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxG
cmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA1NjY4ZGZiZTQxZDEy
YTkyMjRhNDNjMDg4MTM0ZTNjYzVjODRjYzdlLi5jZWExMGExZGUzYWE2NWJhNGE2ZGMxMTQwMTRl
YjU1YTJlYzQyNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3NyArNDM4LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2Vj
bWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5
VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHBy
b3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92
ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVs
c2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYg
KCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0byBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRl
QWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdU
MSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMy
VG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBz
aG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcmVnVDMpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKIAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZh
bEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENS
QVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCwgZWNtYU1vZGUsIHB1dEtpbmQpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwot
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFs
SW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVt
cChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotCi0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBv
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVS
ZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0g
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QzKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAg
ICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QzKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGlu
ayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7Ci0gICAgc3RvcmUzMihyZWdU
MywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0g
ICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVz
cygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIH0gZWxzZQotICAgICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQo
WmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlNjQocmVnVDMsIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0
eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgYnJhbmNoMzIoQmVs
b3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLQotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTog
VXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8g
cmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02NjEsMTIgKzUxNiwxNSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02NzQsMTYgKzUzMiwxNCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDMsIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTY5NCwyOCArNTUwLDI2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIg
PSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1
bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BS
NTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVy
YXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFs
SW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJl
c3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtNzM2LDE4ICs1OTAsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXQKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbElu
Zm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9
IGFyZ3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRH
UFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmpl
Y3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9i
YWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIs
IGVjbWFNb2RlR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BS
NCwgQnlWYWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7
CisgICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVs
c2UKICAgICAgICAgaml0LnJldCgpOwogCkBAIC04MDksMTMgKzY2MywxMyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZQogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRH
UFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5k
R1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgdmFsdWVQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5m
byksIGJ5VmFsSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgp
KSwgcHV0S2luZEdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CkBAIC04NTEsMTQgKzcwNSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxs
RwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJn
dW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BS
NTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRl
TmFtZU9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFs
dWVQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQ
UiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRH
UFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKQEAgLTMyOTAsODIgKzMxNDQsNiBA
QCB2b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBDYWNoZWFibAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJp
ZXIgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQz
MjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxs
cHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxs
cHRyKTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAg
ICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZv
ckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAg
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAg
ICAgICAgICAvLyBDdXJyZW50bHksIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZl
ciBjb21lcyBoZXJlLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGlu
ZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1Bh
dGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNs
b3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9u
ZVRhcmdldCk7Ci0gICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBB
U1NFUlQocmVtb3ZlQ29kZVB0clRhZyhtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkgPT0gcmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20s
IG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxlZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJl
Y3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q7Ci0gICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0
X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRT
dHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVj
dCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jayku
ZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAg
ICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFk
VHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBU
aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVu
aXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0
ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBC
eVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlN
b2RlKTsKLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwpAQCAtMzQwNywyMjMgKzMxODUsNiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtp
bmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlE
ID09IG9wX3B1dF9ieV92YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0KLSAgICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoYnl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2Fz
ZXMpOwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmVDYXNlcywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hl
Y2tzLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3Ms
IGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNh
bGxTaXRlIDogbV9uZWFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVl
KTsKLSAgICB9Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsK
LSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFs
aXplKHBhdGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92
YWwlcyB3aXRoIGNhY2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwg
cHJvcGVydHlOYW1lLnVpZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2Nr
KS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8t
PnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhK
dW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1f
c2xvd09wZXJhdGlvbiA9IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90
SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
KSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5v
dGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0
IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxh
dGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcik7Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsRGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRL
aW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwotICAgIEFTU0VSVChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwot
ICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0j
ZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVy
dHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJl
Z2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
MiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAot
ICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVh
cmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlz
Q29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIo
dHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29s
dXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVh
bCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5
cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxl
T3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCkpOwotI2Vsc2UK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKSk7Ci0jZW5kaWYKLSAg
ICAKLSAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9i
eV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNl
IHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0
aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2Ny
YXRjaDIsIGxhdGVTY3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIGlmIChpc0NsYW1wZWQodHlw
ZSkpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICBB
U1NFUlQoIUpTQzo6aXNTaWduZWQodHlwZSkpOwotICAgICAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0g
ICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNj
cmF0Y2gpOwotICAgICAgICBKdW1wIGNsYW1wZWQgPSBqdW1wKCk7Ci0gICAgICAgIHRvb0JpZy5s
aW5rKHRoaXMpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNo
KTsKLSAgICAgICAgY2xhbXBlZC5saW5rKHRoaXMpOwotICAgICAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAg
Y2FzZSAxOgotICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0g
ICAgICAgIHN0b3JlMTYoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3Bl
cnR5LCBUaW1lc1R3bykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHN0
b3JlMzIoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1l
c0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9w
IGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
VHlwZWRBcnJheVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgIAotICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJv
cGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAg
IFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3Jh
dGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2gg
PSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAg
ICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAg
ICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdl
dCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGlu
ayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JU
eXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJs
eVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIoZWFybHlT
Y3JhdGNoKTsKLSAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDAp
OwotICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIoZWFybHlTY3JhdGNoKSk7Ci0g
ICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9E
b3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vs
c2UKLSAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAg
SnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29u
dmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5
ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKLSAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0
Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICAv
LyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4
Y2VwdCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVu
Y2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFu
ZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxh
dGVTY3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkp
IHsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZw
UmVnVDApOwotICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRj
aCwgcHJvcGVydHksIFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0g
ICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggYjk4YmZl
Y2VkYWE1NTYwMWY5NWE4OGJlZGE2MWIwOWYxYTM0MzQ3MS4uODFhMzFlNjA4NjkzODc3MTZkYmFk
YjQ5NmNjOTdjNjI0YTg0YWU3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC00NjYsMTUwICs0NjYsMjggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgp
OwotICAgIAotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MywgcmVnVDIpOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgYWRk
U2xvd0Nhc2Uobm90SW5kZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDEsIHByb2ZpbGUpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxk
IGRvIHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QxKTsKLSAgICAKLSAgICBKSVRBcnJheU1vZGUgbW9k
ZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBj
YXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRl
Y29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRE
b3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1
b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5
dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwg
bm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGln
dW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9IGJ5dGVjb2RlLm1f
ZWNtYU1vZGU7CisgICAgUHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0
QnlWYWw+ID8gUHV0S2luZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGlyZWN0OwogICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
Q29udGlndW91c1NoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5kcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0g
bGFiZWwoKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1Qw
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6
Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAg
ICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9hZChi
YXNlLCByZWdUMiwgcmVnVDMpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hh
cGU6IHsKLSAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsKLSAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBKdW1w
IHJlYWR5ID0ganVtcCgpOwotICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgbW92
ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsK
LSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGlt
ZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQ
cm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVz
cyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
LUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUs
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAs
IHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVn
VDQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDYpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCi0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJheVN0
b3JhZ2VTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpT
VmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnLCBlY21hTW9kZSwg
cHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
LSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVnVDIs
IFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1pdExv
YWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBwYXlsb2FkCi0g
ICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7IC8vIHRhZwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAgIGVt
cHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENh
c2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QzLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAg
IGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJl
c3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBqdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAK
LSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0g
ICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklY
TUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5
IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmls
dGVyQmFzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC02MTksMTIgKzQ5NywxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOworICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAg
aWYgKGlzRGlyZWN0KQpAQCAtNjMyLDIxICs1MTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAgIAorICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CisK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwo
KTsKLSAgICAKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCiAgICAgLy8g
VGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVy
IHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVuIG9uIG90
aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwotICAgIGVt
aXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6
ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBi
eVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CiAKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9
IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4
Kys7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwor
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggMzdh
ODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5OTAzMTNj
YTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwogICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5
VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4g
ZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29u
c3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1
dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3RE
aXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICBz
d2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAg
IHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRj
aCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAg
ICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNs
b3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNs
b3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2gg
KHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNs
b3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6
Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0Ogor
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAg
ICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRL
aW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJ
bmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQs
IHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
UmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgsMTIgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgCiAgICAg
ICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVD
TUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAg
ICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1LDEyICs4
NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91
bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZv
aWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2b2lk
IHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtp
bmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1Zh
bHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7CisgICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
CisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKTsK
KworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAg
QWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNUeXBlZFZp
ZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAg
ICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxv
YXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWlu
dDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAg
ICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5
cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1No
YXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBl
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIs
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7
CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJ
bmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisK
K3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2Rl
KQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5kID09
IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAKIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3Qs
IEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlL
aW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlkU2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBh
dGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJh
c2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEluQnlJ
ZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
cHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdldEJ5KENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2lu
ZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQp
CiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rp
b24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChj
b2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlvblR5
cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUp
Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAg
ICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29k
ZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQ
cml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7
CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRl
Y2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rp
b25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlw
ZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KIAogICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rp
b24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZh
bDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5n
SW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICB9
CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhlNi4uZWNl
Mzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlLaW5kIHsK
ICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAg
QnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAgICBCeUlk
LAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQgewogCiB2
b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNW
YWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBh
dGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5
S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5
UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCBy
ZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1
cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxldGVCeShK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUs
IFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVs
QnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQg
cmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2Jq
ZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2Fs
bExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3YjE1Mjk2
OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMwNmJj
NDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8vIFRo
ZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMuIFRoaXMg
aXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMu
Y3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5n
LiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNoIHJlZmVy
cyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRoICJsbGlu
dF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1aXZhbGVu
dC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436176</attachid>
            <date>2021-08-23 03:09:42 -0700</date>
            <delta_ts>2021-08-23 03:44:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823030941.patch</filename>
            <type>text/plain</type>
            <size>307883</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5mNjI0NmE0ZTU2YTRiMmE3
YjhhMTAxNDY5NGFkYTBkZmZkNDMwM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTcgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVj
dHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3Rv
cmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0
QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBz
KToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRl
ZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNT
dGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01h
eUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICog
aml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKToK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQv
SklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXplKToKKyAg
ICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OnRyeVB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3Vz
UHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVk
QXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5j
dGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBh
dGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5C
eSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1
dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1Jl
cGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEt
MDgtMjIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlND
XSBSZW1vdmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZh
N2EuLjMyM2Q4YTQwZTFmNmUyM2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3
RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0
Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0
YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjND
NiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4
NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBD
MzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDEx
IEBACiAJCTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0
dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0
QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3Rh
dHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1
RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFy
aWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZl
cmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRS
ZWZlcmVuY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2
OTUsMTAgQEAKIAkJCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uaCAqLywKIAkJCQkwRjE1Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNw
cCAqLywKIAkJCQkwRjE1Q0QyMTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8s
Ci0JCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAot
CQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJ
MEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkw
RjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkz
MzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJB
RTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNv
cmRlZFN0YXR1c2VzLmNwcCAqLywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVj
b3JkZWRTdGF0dXNlcy5oICovLApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJF
MUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
VmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8q
IFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYw
NDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2
QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTlj
MzAyMGQuLjcwNzdlZjlhZTMxMTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFt
Q29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Q
cm94eWFibGVBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9S
ZWNvcmRlZFN0YXR1c2VzLmNwcAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVj
b2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3
ZTY5ODI4MGMzNWI2Li5jZTJiOGZhYjA3ZTYyZjBlZmI2MjkxYzk5MzFjZjAwMzQzYTYzZjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05
OSw2ICs5OSwxOSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRp
Z3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWlu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVu
dGlmaWVyQ2hlY2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MzI2LDYgKzM1MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVN
YXRjaCgpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJp
bmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
NzgsNiArNDE3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUs
MTEgKzQ3NywyNCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
IGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRT
dHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBi
cmVhazsKICAgICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9l
c0NhbGxzKFZNJiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBj
b25zCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBm
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwx
OSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIp
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3Ro
ZXIudHlwZSgpID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpA
QCAtOTYxLDYgKzEwNjUsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAog
ICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAg
IGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsxMTY2LDgg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNo
R1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwogCkBAIC0xMTQ1LDYgKzEyNTMsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJl
Z3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTExOTksMTUg
KzEzMDksMTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsK
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQpAQCAtMTIyNywxNiArMTMzNiwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAogICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5k
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKIAogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwg
c2NyYXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZh
bHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElm
RW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQu
YnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNo
R1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9h
ZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBK
U1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0
eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAg
ICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBA
IC0xMjYyLDIxICsxMzcxLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRG
UFJSZWcpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFz
ZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQp
LCBzdGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5j
aElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAg
ICAgaml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2Fk
VmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAg
ICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRj
aEdQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7Cisg
ICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2Ny
YXRjaDNHUFIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwg
dmFsdWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM5NSwyNzMgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAg
IHN0YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0
ZXJzKCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFm
YWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygm
aml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3Bw
aW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUu
ZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAg
ICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBh
bGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBk
b25lIGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3Qz
MihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKENvcHlPbldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3Bl
cnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsK
KworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAg
IGF1dG8gcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2Vy
dmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0
LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNl
KTsKKyAgICAgICAgfTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0
OworICAgICAgICBpZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAg
ICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3Jh
Z2VTaGFwZSkpKTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KEND
YWxsSGVscGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSkpKTsKKyNlbHNlCisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIEpTVmFsdWU6Om9mZnNldE9mVGFnKCkpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBl
eHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9
IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gRG91Ymxl
U2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3Vv
dXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBw
ZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3RlZFNoYXBlKSkpOworCisgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZTogewor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3RJbnQubGlu
aygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMkdQUiwg
c3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQo
aml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUs
IHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworCisgICAgICAgICAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAg
ICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHBy
b3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
dmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVC
YXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsK
ICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAgICAgIGlzRW1w
dHkubGluaygmaml0KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkpOworICAg
ICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rv
ck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAg
ICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQp
OworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFu
ZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7
CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhq
aXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFt
cGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAg
ICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQg
YWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJ
bnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5z
Y3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNl
ID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91
YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNl
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNU
b0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRl
LnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAg
ICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0
aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBl
bmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwg
c2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlm
IChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBz
Y3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0g
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAg
aml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNw
YWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAg
aml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAg
ICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1
YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAg
ICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVh
dGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsK
KyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAg
IHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xh
bXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0
Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZl
cnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
Rm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7Cisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
LnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0g
SW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAg
IAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CkBAIC0xODk2LDYgKzIyNjQsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlk
R1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQ
Uik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVH
UFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKIAogICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwpAQCAtMjA1OCw2ICsyNDI4LDggQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlKCkt
PnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwpA
QCAtMjE4Myw2ICsyNTU1LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVja1ByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERv
dWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgLy8g
VGhlc2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRo
ZSBndWFyZCBpcyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBz
dXJlIHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBz
aW5jZSB0aGV5CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tz
LgpAQCAtMjE5NiwyMiArMjU4MSwzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNlOjp0b1R5
cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vz
c1R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToK
ICAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAgICAgICAg
IHJldHVybiBUeXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAgICByZXR1
cm4gVHlwZUZsb2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjI4NCw2ICsyNjc4LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVTaGFy
ZWQoY29uc3QgQWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdM
b2FkOgogICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNDE5Yzk5
YzkwZjQzOTAxODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uNTYzYTE1NTJhZTQyMTY0NDA0NmQw
YWE0MWQyM2I2YWRkNWRiNjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2UgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQs
CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIEluZGV4ZWRT
dHJpbmdMb2FkCisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRleGVkSW50
MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRleGVkQ29u
dGlndW91c1N0b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisgICAgICAg
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlLAor
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmUsCiAgICAgfTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKQEAgLTM1MywxMiArMzY2
LDEzIEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICBzdHJ1Y3QgS2V5IHsKICAg
ICAgICAgICAgIEtleSgpID0gZGVmYXVsdDsKIAotICAgICAgICAgICAgS2V5KEdQUlJlZyBiYXNl
R1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BS
LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0
aW5lKiB3cmFwcGVkKQorICAgICAgICAgICAgS2V5KEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFs
dWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYXJyYXlQ
cm9maWxlR1BSLCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhpY0FjY2Vzc0pJ
VFN0dWJSb3V0aW5lKiB3cmFwcGVkKQogICAgICAgICAgICAgICAgIDogbV93cmFwcGVkKHdyYXBw
ZWQpCiAgICAgICAgICAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKICAgICAgICAgICAgICAg
ICAsIG1fdmFsdWVHUFIodmFsdWVHUFIpCiAgICAgICAgICAgICAgICAgLCBtX2V4dHJhR1BSKGV4
dHJhR1BSKQogICAgICAgICAgICAgICAgICwgbV9zdHViSW5mb0dQUihzdHViSW5mb0dQUikKKyAg
ICAgICAgICAgICAgICAsIG1fYXJyYXlQcm9maWxlR1BSKGFycmF5UHJvZmlsZUdQUikKICAgICAg
ICAgICAgICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQogICAgICAgICAgICAg
eyB9CiAKQEAgLTM3NSw2ICszODksNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAg
ICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BSID09IGIubV92YWx1ZUdQUgogICAgICAgICAg
ICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0gYi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAg
ICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBiLm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAg
ICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQUiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAg
ICAgICAgICAgICAgICAgICAgICYmIGEubV91c2VkUmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0
ZXJzOwogICAgICAgICAgICAgfQogCkBAIC0zODMsNiArMzk4LDcgQEAgY2xhc3MgU2hhcmVkSklU
U3R1YlNldCB7CiAgICAgICAgICAgICBHUFJSZWcgbV92YWx1ZUdQUjsKICAgICAgICAgICAgIEdQ
UlJlZyBtX2V4dHJhR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1fc3R1YkluZm9HUFI7CisgICAg
ICAgICAgICBHUFJSZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIH07CiAKQEAgLTQxNiw2ICs0MzIsNyBAQCBjbGFz
cyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BS
ID09IGIubV92YWx1ZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0g
Yi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBi
Lm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQ
UiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV91c2Vk
UmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgb3JkZXJpbmcgb2YgY2FzZXMgZG9lcyBub3QgbWF0dGVyIGZvciBzaGFyaW5n
IGNhcGFiaWxpdGllcy4KICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHBvdGVudGlhbGx5
IGluY3JlYXNlIHN1Y2Nlc3MgcmF0ZSBieSBtYWtpbmcgdGhpcyBjb21wYXJpc29uIC8gaGFzaGlu
ZyBub24gb3JkZXJpbmcgc2Vuc2l0aXZlLgpAQCAtNDQ1LDYgKzQ2Miw3IEBAIGNsYXNzIFNoYXJl
ZEpJVFN0dWJTZXQgewogICAgICAgICBHUFJSZWcgbV92YWx1ZUdQUjsKICAgICAgICAgR1BSUmVn
IG1fZXh0cmFHUFI7CiAgICAgICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSOworICAgICAgICBHUFJS
ZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8UmVmUHRyPEFjY2Vzc0Nhc2U+PiYgbV9jYXNl
czsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8U3RydWN0dXJlSUQ+JiBtX3dlYWtTdHJ1Y3R1
cmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCmlu
ZGV4IDZkYzdiMGU1NDQ3ZmUwNjBkYmNiZDI0ZDk5MDk3NTY1NzlmYzY1NzQuLjkxZGE4ZjNlZmY5
MmZjM2E4OTU3MGQ3NWE0YjkxM2JkMjYzMmNjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKQEAgLTIwOCw2ICsyMDgsOSBAQCBjbGFzcyBBcnJh
eVByb2ZpbGUgewogICAgIEFycmF5TW9kZXMqIGFkZHJlc3NPZkFycmF5TW9kZXMoKSB7IHJldHVy
biAmbV9vYnNlcnZlZEFycmF5TW9kZXM7IH0KICAgICBib29sKiBhZGRyZXNzT2ZNYXlTdG9yZVRv
SG9sZSgpIHsgcmV0dXJuICZtX21heVN0b3JlVG9Ib2xlOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlQcm9maWxlLCBtX21heVN0b3JlVG9Ib2xlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
UHJvZmlsZSwgbV9sYXN0U2VlblN0cnVjdHVyZUlEKTsgfQorCiAgICAgdm9pZCBzZXRPdXRPZkJv
dW5kcygpIHsgbV9vdXRPZkJvdW5kcyA9IHRydWU7IH0KICAgICBib29sKiBhZGRyZXNzT2ZPdXRP
ZkJvdW5kcygpIHsgcmV0dXJuICZtX291dE9mQm91bmRzOyB9CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5j
cHAKaW5kZXggNzY3MWQ4N2IxZWE3NDlkYzM0NTZmNzc2NWFjMDZjNGE4YmNmYjJiMS4uYzAyNWE3
YmY2NTE5NGJkYTRlODIxNTFkOWNiM2YyOTY3OGRhOTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcApA
QCAtMTQxLDYgKzE0MSw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zCiAgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVSZWdzKTsKICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BS
KTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAg
IGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogCiAgICAgR1BSUmVnIHBhcmFtQmFzZUdQUiA9
IEludmFsaWRHUFJSZWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1
c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUzYjg0OTE3YzQ4M2Q5NTAuLjdh
MDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNz
IENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgR2V0QnlTdGF0dXM7CiBj
bGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsKK2NsYXNzIFB1dEJ5U3RhdHVz
OwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVj
dCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJQ1N0YXR1cyB7CiAgICAgQ2Fs
bExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAgICAgR2V0QnlTdGF0dXMqIGdl
dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBpblN0YXR1cyB7IG51bGxwdHIg
fTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07CisgICAgUHV0QnlT
dGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxldGVCeVN0YXR1cyogZGVsZXRl
U3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAppbmRleCA0ODQxMDEzOWRjMmY4YzBkNWM4MGEyZmY5MDVj
M2FhNmExMzVkZmIyLi5kYjc3N2U5ZWRhNGUyZmY5ZGY4ZGI5ZmEwYzc5MGE2ZWVkNWVlZTBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcApA
QCAtMjE4LDYgKzIxOCw4IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEdQUlJlZyBnZXRTY3JhdGNo
UmVnaXN0ZXIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogI2VuZGlmCiAgICAgaWYgKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEyZjMx
ZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDBkNmExZjlkYTU4MjUyMDU1NGFhYzM0
ZWMxYTQ0ZTQyOWFmODY0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC00OTQsNiArNDk0LDggQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2MKICNlbmRpZgogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9
IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7
CiAKICAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwogCkBAIC04MTAsNiArODEyLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICAgICAgICAg
ICAgIHN0dWJJbmZvLnZhbHVlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ucmVncy50aGlzR1BS
LAogICAgICAgICAgICAgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwKKyAgICAgICAgICAgIHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8udXNlZFJlZ2lzdGVy
cywKICAgICAgICAgICAgIGtleXMsCiAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlcywKQEAgLTg0
Niw3ICs4NDksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgaWYgKGNhbkJlU2hhcmVkKQotICAgICAgICAgICAg
dm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHVi
SW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBz
dHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgp
KSk7CisgICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1YlNl
dDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHViSW5m
by5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGZpbmlzaENvZGVHZW5lcmF0aW9uKFdURk1vdmUoc3R1YikpOwpAQCAtMTAy
Miw2ICsxMDI1LDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3Ry
aW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1
ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUg
IkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgi
Ci0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0g
ICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0m
IHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7
Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55
IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0
IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBo
YXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50Lgot
ICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAo
IXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJ
RCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkg
ewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2
bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlk
KTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5m
bzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAg
ICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJv
ZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVT
RURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1Yklu
Zm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAg
ICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9
IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZv
KTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0
ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVz
ZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nl
c3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFj
Y2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxl
OiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJ
bmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxs
TGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlh
bnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAg
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxp
bmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0
RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29k
ZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0
YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2lu
KTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
YmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGlu
ZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJl
c3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRG
cm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBj
YWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQu
aXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICBy
ZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
Y29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlk
LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNl
SW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRT
dGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0
dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8g
c2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNo
IGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJv
dyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmlu
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
TWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFu
cyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGlu
ZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3Qg
Y3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAg
ICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0
aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8v
IFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFBy
aXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVy
IGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAg
ICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxk
LiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlv
biBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRL
aW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEg
dHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAg
Ly8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAg
IC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBj
b3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1
cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGll
cyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVj
dCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0g
ICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9w
dGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlv
biBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJh
bnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAg
Ym9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNl
bmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlm
IChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlm
IChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVt
cGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAo
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFy
aWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5
SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRp
b24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7
Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1h
a2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAK
LSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1w
bGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBl
bmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAg
ICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBm
b3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFu
dC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lk
IFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmlu
dCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2Fz
ZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAi
KSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoK
LSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRG
bGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZv
cm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMK
LSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9J
bmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0
dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQ
YXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0
IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3Jt
YXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0g
TWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVz
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxl
KQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0
dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBj
b250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2Vu
ZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1h
dGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24o
KSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4m
IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXpl
KFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAg
Ci0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQp
Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAg
ICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2
b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFm
YTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNs
dWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6
OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5
SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYg
UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17
Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIu
bV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVy
ZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zm
c2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0g
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVz
ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAg
IHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
b2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsK
LSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50
IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJl
c3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZN
b3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUq
IFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1f
b2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3Ry
dWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewot
ICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAg
bV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0
QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChr
aW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5k
KCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkg
ewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewot
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJp
YW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRy
YW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5l
d1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0g
b3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3Ro
ZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBp
ZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQg
PSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAg
ICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0
aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0
aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0g
ICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlk
VmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwot
ICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBh
bnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAg
IGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJl
Lm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7
Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lm
Q2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZp
bmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2
bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZt
LmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZp
bmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAg
IG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAi
LCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQo
KSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5z
aXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFu
dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5k
IHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9u
LAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
Ci0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
Ci0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwot
ICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVy
ZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29s
IHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2lj
cyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0
aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29u
c3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0
ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAg
fQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2Nh
bGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZN
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tp
bmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xk
U3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0g
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NmJjY2E2N2NmMTg2YzQ2YmRhMDMzMDZiYTA0M2MwNDBmYTdj
YTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUg
IkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6
OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHBy
b2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVk
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lk
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8g
aGF2ZSBhIGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2
YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMg
aXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8g
SUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisK
KyAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CisgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
IGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9u
U2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIs
IHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNp
ZiBFTkFCTEUoSklUKQorUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29k
ZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BB
UkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmln
aW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1Yklu
Zm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoc3VtbWFyeSk7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7Cisg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQor
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAgICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFj
Y2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAg
ICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVy
KCksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
YXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vzcy5pZGVudGlmaWVy
KCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2
YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVz
IGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVy
ZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0
YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRl
RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vz
cy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Cit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywg
Ynl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNp
dGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29u
dGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMg
PSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNz
ID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAg
ICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4
aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0
QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5k
ZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGly
ZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5k
ZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKwor
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAg
ICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVz
dWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJp
YnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQ
cml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFu
cyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVl
ZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4K
KyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1
dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBj
YW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0
CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJl
Y2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5v
dCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAg
ICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lz
IGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0
aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5
IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9u
IGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFT
U0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Cisg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAg
ICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0
aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
KyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBj
b25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAg
cmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCiti
b29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBNYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9zdGF0
ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJpYW50
c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6c2xvd1Zl
cnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0
QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJ
ZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZp
bmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlT
dGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgeworICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQ
YXRoKTsKKyAgICB9OworICAgIAorICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9J
bmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2lt
cGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgeworICAg
ICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBN
YWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgfQorICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1w
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFu
dHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQor
ICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworICAg
IGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRp
b247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAg
ICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1f
dmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCIoTWFr
ZXNDYWxscykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzJhMWM3
M2M4ZjQxY2ExOTJlNThkNGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhp
dEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNz
IFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJ
dCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3Jt
YXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUg
a2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRh
a2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtu
b3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzCisg
ICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9y
bWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3Rh
dGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8
IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5
U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChz
dW1tYXJ5KSB7CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgor
ICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0
aDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRh
a2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2Fs
bHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAg
ICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNv
ZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0
dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxk
UHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29u
dGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4p
OworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9J
bmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsg
fQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJz
aW9uKCkgY29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAx
PiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5n
bGVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0
aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4
KTsKKyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7Cisg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVj
dG9yPFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlW
YXJpYW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQorewor
ICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5t
X2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRl
bnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1
dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJp
YW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmll
cikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtT
dGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAh
PSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2Fy
eSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFj
ZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFy
aWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtp
bmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
aWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAg
ICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJh
bnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsK
KyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNp
dGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5z
aXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2Vk
Q29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlv
blNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVz
IHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExp
bmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9u
U2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFt
ZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25l
U2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExp
bmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2Up
Cit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFj
ZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9v
ZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFT
U0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2Uu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVy
Z2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQg
YSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGls
ZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0
CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhl
IHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNT
dG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5t
X29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVj
dHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9u
ZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQorewor
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVt
cHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAg
ICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAg
b3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRl
eHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIs
ICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZh
cmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtT
dGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBS
ZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAg
IAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
ICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQor
ICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVy
KFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29u
c3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2Fj
aGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xk
U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVj
dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24g
fHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVy
biBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5z
aXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBm
b3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlz
IGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Qg
eyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1w
bGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxM
aW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAh
PSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVy
ZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAg
IEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVy
ZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVs
bHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcu
LmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYy
LDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0
YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewot
ICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0
YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0
dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0
cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxl
dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5
ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3
IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0
YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMq
IGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRk
SW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERl
bGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
RGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsK
ICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1
cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVf
cHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNl
YjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3
ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJs
b2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVz
ZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJ
RChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAg
ICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxv
Y2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4
ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmU2N2JjMTA4YmUzMjBkZDZkMjU5ZTc3YzgxYjlkNTFjNDVj
ZjU4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFs
LAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAg
ICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtMzY1LDYgKzM2Niw3IEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgR1BSUmVnIGJyYW5kR1BSOwogICAgIH0gcmVn
czsKICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJS
ZWcgbV9hcnJheVByb2ZpbGVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFI7CiAgICAgLy8gRklYTUU6IFszMi1iaXRzXSBD
aGVjayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMx
N2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3Ry
dWN0b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0
dXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJh
bmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0
cnVjdHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmls
dGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3
ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1Zh
bHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVh
bGx5IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7
CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAg
ICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00
MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRl
KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWRE
aXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBh
dXRvIHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJ
ZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5v
bmUoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlm
aWVyKCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LAogICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAg
ICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2Qp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdT
dHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAt
NDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRP
SzoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAg
LTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0
ZSgpKQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9z
dHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1
cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQy
MGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUz
ODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xh
c3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJ
ZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi43ZjQwMmU2OTdm
OWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRmMjIzNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hl
Y2twb2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03
NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUg
IlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBC
eXRlQ29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAg
Ci0gICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3Jt
IG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQg
YW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAg
IE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7
CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0
dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNE
aXJlY3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFN
b2RlKTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5
U3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5k
ZXgsIEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAg
ICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1
dEtpbmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2
YXRlRmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUp
OwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAg
ICAgICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4g
b25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAg
ICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUg
b24gdGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlv
dXNseSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0
cnVjdHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVt
ZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0
YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25l
IGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdl
dEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
cmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZl
ciwgdGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRo
ZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5
Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxv
YWRlZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUq
IHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3Ry
dWN0dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
LCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24s
IE5vZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlk
KAotICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSog
dmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3Qs
IEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQog
ICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJ
bmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFw
aChwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9w
SW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAg
ICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1
cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVj
bWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVj
dCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAg
IGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlh
bnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8
ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmlu
ZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRp
ZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9w
bGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5p
c0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlv
bnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxp
bmluZ0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAg
ICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGlj
QWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNE
aXJlY3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAg
ICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0g
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAg
ICAgIGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCAr
NTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3Rh
dHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsK
KyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52
YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRp
UHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRT
dGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52
YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSks
IGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQo
cHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBw
dXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAg
Y2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCku
YWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJh
c2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwg
dmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAg
LTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2
YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7Cisg
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNl
IFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAg
ICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAg
ICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVm
YXVsdDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAg
IGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMs
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8
ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewor
ICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBP
cEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwo
KSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwg
cHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9s
eW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNp
emUoKSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlv
bnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcElu
Zm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBo
LmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwor
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZv
ciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkg
ewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsK
ICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAg
ICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNb
MF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewog
ICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJ
ZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAg
c3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
OiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJU
KHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmls
dGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwg
YmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0
aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlP
ZmZzZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0
QnlJZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3At
Pm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29k
ZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhl
IGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8g
YmVjb21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMg
bm8gaW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29t
ZSBpbmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hl
ZCBjZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
Njc3OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAg
ICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxl
QXNQdXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBi
eVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmll
ci5pc1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAg
ICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAg
ICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHBy
b3BlcnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5l
U3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCkpOworCisgICAgICAgICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0
eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgICAg
ICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBj
dXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQ
cml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUs
IHN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29t
cGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAg
ICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQp
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9w
SW5mbyhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1
NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlk
U3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3Rh
dHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAg
ICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5l
Y21hTW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVj
bWFNb2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAg
ICAgfQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNo
R2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVz
OwogICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwg
ZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0
ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3Rh
dHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlh
bnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5r
aW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0
KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTg4MTksNDUgKzg4MDgsMjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhp
dEluZGUKICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICBib29s
IGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owog
ICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgUHV0
QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVj
b2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBi
eXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJl
Y29tZXMgbnVsbC4KLSAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5m
b3JtYXRpb24uCi0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICYm
IGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29r
U2xvd1BhdGgKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAg
ICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50
aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGZyb3plbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICBpZiAoIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7
CisKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAorICAg
ICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlk
ZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50
aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9n
cmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZp
ZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9s
KCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJ
bmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkp
OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0
SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5
SWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQot
ICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVt
YmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNv
ZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA5MTY0NzBkMTdk
NTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3OTU4YjRhLi42ZjIwNGQyYzVkZTBhNjEyZjczMWM5NTdi
NDYxZGNmMzBjNGExMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaApAQCAtNTY5LDcgKzU2OSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRC
eUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKaW5kZXggODZhM2QwNzY2NGQ3ZmE5Mjc1MTI5
OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNlOWZmMGViNWRhNTEwZWMyMzQwNjQ2MmE3MWU4ODA5NTA5
NjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0
YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAppbmRleCBlYWVhZjg1ZWEyNTQxNzI1NzU1ZjQ4Y2VmZGVkZTAzYjgxYzlmYTJhLi5iODgy
NWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFkOTMyNGE0MGMxNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgs
NyArMzgsNyBAQAogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNz
IENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAK
IAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlWYXJpYW50
JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmljRmlsdGVyKFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5jb250
YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKQEAgLTUxMywxMSArNTEzLDkgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UodmFyaWFudC5pZGVudGlmaWVy
KCksIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CkBAIC0xMjEzLDcgKzEyMTEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zm
c2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNl
VmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwog
ICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTIyNCw3ICsxMjIy
LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRp
b24qIHRyYW5zaXRpb24gPSBudWxscHRyOwotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgdHJhbnNpdGlvbiA9
IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICB9
CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3Bl
cnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNh
bkV4aXQ7CiAKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIGlmIChkaWRBbGxvY2F0ZVN0b3JhZ2UpIHsKICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRl
cmZseSwKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICBpZiAoIWJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zp
bml0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgc3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgUHV0QnlTdGF0dXMgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3Ry
dWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVu
dGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCks
CiAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAg
aWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKQEAgLTE0MjQsOCArMTQyMiw4IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKIAogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
LSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJp
YW50cygpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24o
Y29uZGl0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OCw3
ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAg
ICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlW
YXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0
S2luZC5pc05vbmUoKSB8fCBwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwogICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAg
Y2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBhbHJl
YWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZv
bGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yywgc3RhdHVzKSksCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQ
dXRCeVN0YXR1cywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50
aWMsIHN0YXR1cykpLAogICAgICAgICAgICAgRWRnZShiYXNlTm9kZSkpOwogCiAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVp
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNjBmYmIxNWM1
OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2MzN2UxOGYxZS4uZTY0ODE2N2MxMTg2YmM4YzkzZjMyZThj
NTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0ZTlhNWNmMmQ1NmM2NDgzZDIyYWJiYTY2NzJhYzczODUw
OS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFjNTI0OTE1M2Y5ODZlMzk4YTI2MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yODY1LDcgKzI4NjUsNyBA
QCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJbnRy
aW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzLi4w
YWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBE
dW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVzKCkp
OwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMo
KSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAg
ICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAq
bm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRhZGF0
YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBub2Rl
LT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkx
MGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAw
YzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
Z2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0
QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxz
LCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5r
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAz
OWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2
ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIEND
YWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9p
ZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdl
bmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7Cisg
ICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdl
biwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgbV9kZWxCeUlk
cy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xv
d1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBD
Q2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1
dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0
b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5
ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIy
MGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApA
QCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRC
dXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFi
YWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4
YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3
IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQ
cml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNs
dWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nl
c3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7
CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3
cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFz
UHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRCeVN0YXR1cygpCiAgICAgewotICAgICAg
ICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3RhdHVzOworICAgICAgICByZXR1cm4gb3Ao
KSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyog
cHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkpOwotICAgICAgICByZXR1cm4gbV9vcElu
Zm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygp
KTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAK
ICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQw
Li45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQxNmVhYmViYjllMjIyMzVlMTdlOGIuLjI4
OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2JlZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAg
LTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KIAogICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2Rl
SUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgY29tcGlsZSBv
cF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGluZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4g
d2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRoaXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAg
ICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9zc2libGUgdGhhdCB3ZSBjYW5ub3QgZmlu
ZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNj
ZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJhc2VsaW5lIENvZGVCbG9jayAoQSkgaXMg
Y29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4gKEEpIGdldHMgREZHIChCKS4KLSAgICAg
ICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVjdHMgZW5vdWdoIGluZm9ybWF0aW9uIGZv
ciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1cmVTdHViSW5mbyBmcm9tIChBKSBhbmQg
Y29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxsLgotICAgICAgICAgICAgICAgIC8vIDQu
IChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNlIGl0IGlzIG5vdCBleGVjdXRlZC4gVGhl
biwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAgICAgICAgLy8gNS4gVGhlIENvZGVCbG9j
ayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28gKEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkg
ZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9jayBhZ2Fpbi4KLSAgICAgICAgICAgICAg
ICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3Ry
dWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlkIChvcmlnaW5hbGx5LCBwdXRfYnlfdmFs
KS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChBKSdzIEpJVERhdGEgaXMgY2xlYXJlZCBv
bmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRl
eCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAg
ICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0Vu
dHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKICAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2
ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNz
IE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFw
cHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5j
b21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50
OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFy
aWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1
LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFk
ZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4
MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNs
YXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
Y2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAw
ZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5
ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
QEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6
Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmlu
ZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0ZTJkNmI1ZDk5M2ViNmIuLjYwM2ZmN2IyZTUy
ZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEw
YzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODll
ODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlcklu
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBm
Li5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNz
IFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYx
YTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApA
QCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEs
NyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1
MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRj
aFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2Ug
RmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4ZWY3MTAwLi5jMzlmMmRkZjM3
NTM2MzFiMTUyODUxMWFiYzkwZTcxYTUwYTMwN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoK
ICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpA
QCAtODk1MSw3ICs4OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9y
PFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJh
c2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tp
XTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCku
c2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClb
al0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2
ICs4OTY2LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSAr
IDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFj
ZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAg
bV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZv
KCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUz
OWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3
N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0
MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xp
c3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxk
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0
YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1
cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJm
YzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMz
NmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCAr
NjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1
dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRk
QWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBt
YWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisg
ICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0
aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxm
UGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERl
bEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVh
NWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0
NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1
MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlW
YWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRC
eUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRl
eCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsK
QEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNX
aXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1f
cHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0g
bV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09
IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4
ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkw
OSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRC
eVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRz
LCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVm
ZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDY0NDBmZjI0MTBmMDM3MmQxYjVmYjdm
MDU3N2ZkNzBmNDllMjA1NTguLmYwZTBmZWMyZWZjNTQyYzVhZTlmOWMyODkyNzEyNTgxZWY1Zjhk
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0g
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIs
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0
QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
KQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0y
NjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMzgyLDM4ICszNTYsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFy
cmF5UHJvZmlsZSopOworICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9s
ZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAg
ICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdU
MiBjb250YWlucyBpbmRlY2luZyB0eXBlLgotICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUg
aXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAotICAgICAgICAv
LyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVh
ZHkgcHJvZmlsZWQuCi0gICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBJbnQzMlNoYXBlKTsKLSAgICAg
ICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dERvdWJsZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIERvdWJs
ZVNoYXBlKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
ID0gQ29udGlndW91c1NoYXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBl
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNt
YU1vZGUoT3ApOwpAQCAtMTA2NCw2ICsxMDA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAgICAgIFZlY3Rv
cjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICAg
ICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAgICAgIFZlY3Rv
cjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRJ
bkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlWYWxHZW5l
cmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2VuZXJhdG9yPiBt
X2RlbEJ5SWRzOwpAQCAtMTA5MSw2ICsxMDM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVk
IG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBt
X3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlWYWxJ
bmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5kZXggeyBVSU5U
X01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLjRmYWU1YWQ2NzFm
ZDBlYjVmZjU3MTA1N2I0YWQ1MzBhNDA0MWM3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsNyArMTQy
LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3Io
Y29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0
LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9H
UFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQo
cHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjggQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRv
cjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQog
ICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgYXJyYXlQcm9maWxl
R1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtp
bmQpCisgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1v
ZGUpCisgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwg
bV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsK
KyAgICBtX3N0dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigp
OworICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyAgICBtX3N0dWJJbmZvLT5t
X2FycmF5UHJvZmlsZUdQUiA9IGFycmF5UHJvZmlsZUdQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1
YkluZm8tPnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5w
cm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklU
UHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkK
K3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdl
bmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQ
YXRoKQoreworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRy
ID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlv
bl9HU3NpSkpDIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fcHV0S2luZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
aWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOwor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAg
ICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFr
ZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVn
IHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXgg
ZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uM2NlNWQzN2QyYzQwZGM5
OTA0OWUxMmFkNTMxNGI4OTVmNGMwMzQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNs
YXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRC
eUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAg
ICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAg
ICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFs
dWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9u
X0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1f
ZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9
OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJh
c2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAg
ICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NU
eXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVn
IGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSwgUHV0S2luZCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1NldCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIGZpbmFsaXpl
KExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5r
QnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwor
CisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CisKK3ByaXZh
dGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OworICAg
IFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNs
YXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJs
aWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDc3NDRiNTA4Mzdh
ZWE3YmEwODVhMDEzNDVmYmJmMmI2OGJmMGQ0MjUuLjk4ZmQwMGYwZDU3MWE1OWNiNjIyYTQxYTRm
NzMwM2E5ZDNmYzc5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBA
IC0zNTQsNiArMzU0LDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRlCiAgICAgbG9hZDgoQWRk
cmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIGluZGV4aW5n
VHlwZSk7CiB9CiAKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Cisg
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSkpOworICAgIH0KK30KKwogaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSkKIHsKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NP
Zk1heVN0b3JlVG9Ib2xlKCkpOwpAQCAtMzY0LDI0ICszNzIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVz
c09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VB
cnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIGF1dG8gYXJyYXlQcm9maWxl
U2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkp
IHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhh
cnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAgICB9OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1v
ZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7Ci0gICAgaWYgKGFycmF5
UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRE
b3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkK
LSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlN
b2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdl
OwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCiBBTFdBWVNfSU5MSU5FIGludDMyX3Qg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDI0ZDlmNWVkZjg3MTU4MzhkNzc1
YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2MzI4MWUzNWRmZTU1ZmFlMjA2MTAwYTE1ZGE5NzE5
YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwg
c2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9
CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1
MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplYwogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xv
dCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAK
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4
Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYgogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90
LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEz
LDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmllbGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5
cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vz
c1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBj
b2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNo
UHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJl
LCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZSk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0
dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwxNiArOTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZv
aWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNs
b3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xk
U3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGlj
IHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gKmlu
ZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBA
IHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiArOTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAg
IHJldHVybjsKLSAgICB9IAorICAgIH0KKwogICAgIGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkg
ewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxl
LT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8t
PnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVy
Q2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkp
KQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5p
c1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVy
dHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNt
YU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUg
dmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAq
bWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgp
KSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUo
KSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRo
czo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3Bl
cnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIzLDIyNiArMTAxOCwyMDYgQEAgZW51bSBjbGFzcyBP
cHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdpdmVVcCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRp
b25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0QnlW
YWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNN
QU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Ci0KLSAgICAv
LyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25S
ZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6
ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
ICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5pbmRleGluZ01vZGUoKSkp
Ci0gICAgICAgIHJldHVybiBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLQotICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotCi0gICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXph
YmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRp
bWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVG
b3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJt
aXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+
aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2Nr
ZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCwgZWNtYU1vZGUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRv
IHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdl
dCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRp
bWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICAgICAgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0
KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1i
b2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpOworICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAot
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2Vlbikgewot
ICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVk
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0g
bGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0s
IGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8t
PmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikp
CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0
QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0
aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlv
blJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElm
IHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRo
ZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWlu
LiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAg
Ly8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5
IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJl
IHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAg
Ly8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1Bh
dGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAot
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVz
dWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXAp
IHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0
YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3Bl
cmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
YnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
c3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLXN0YXRpYyBPcHRp
bWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgot
ICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBz
dHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVy
ZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERpcmVjdChhcnJheU1v
ZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgeworICAgIGlmICghaXND
b3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50
MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2
bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZSkgewog
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBhdGNoQXJy
YXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
ICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIH0KKyAgICB9
CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50
aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
LmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFi
bGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewogICAgICAgICBjb25z
dCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlv
blJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElk
PE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgUHV0S2luZDo6RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBs
aWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBl
Y21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOworCisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxT
dHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBDb21tb25TbG93
UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgp
KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXBhdGNoUHV0
QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6OkRpcmVjdCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1p
emF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXph
dGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8v
IElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5n
IHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFn
YWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAg
ICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVu
aXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5
IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAg
ICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xv
d1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIAotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1v
ZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQg
cmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkg
ewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1Mp
LCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KIAotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1
YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBkaXJlY3RQdXRCeVZh
bE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgp
KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
Yywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFN
b2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAgZGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpz
bG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVD
TUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
KworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVl
LCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHVi
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkp
OworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwot
ICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisKKyAgICBzdHViSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNP
YmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09i
amVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgZGly
ZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQs
IHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCcmFu
ZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDI1ODRl
OTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgxZDVmMTk5OTguLmVmYmQ4ODczNTQyZmMzZjRiZTgz
ZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywxNSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZQog
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7Ci1KU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyos
IEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOworCitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwogCiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRUNNQU1vZGUpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxG
cmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA1NjY4ZGZiZTQxZDEy
YTkyMjRhNDNjMDg4MTM0ZTNjYzVjODRjYzdlLi41NDVlNGFjNjAwYjBjODU2ZWI4MWUxZGY1MGFi
OGQ5ZmEyY2ViOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3NyArNDM4LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2Vj
bWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5
VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHBy
b3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92
ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVs
c2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYg
KCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0byBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRl
QWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdU
MSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMy
VG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBz
aG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcmVnVDMpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKIAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZh
bEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENS
QVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCwgZWNtYU1vZGUsIHB1dEtpbmQpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwot
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFs
SW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVt
cChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotCi0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBv
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVS
ZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0g
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QzKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAg
ICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QzKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGlu
ayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7Ci0gICAgc3RvcmUzMihyZWdU
MywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0g
ICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVz
cygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIH0gZWxzZQotICAgICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQo
WmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlNjQocmVnVDMsIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0
eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgYnJhbmNoMzIoQmVs
b3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLQotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTog
VXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8g
cmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02NjEsMTIgKzUxNiwxNSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02NzQsMTYgKzUzMiwxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJnVDMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDMsIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTY5NCwyOCArNTUzLDI2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9m
aWxlKSwgcHJvZmlsZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3Bl
cmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNzM2LDE4ICs1OTMsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBh
cmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVu
dEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIGVjbWFNb2RlR1BSKTsK
KyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BS
LCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKIAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgQnlWYWxJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGppdC5m
YXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgaml0
LnJldCgpOwogCkBAIC04MDksMTMgKzY2NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZQog
CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1lbnRH
UFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJhc2VH
UFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
dmFsdWVQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2
YWx1ZUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQ
Uik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwgcHV0S2luZEdQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CkBA
IC04NTEsMTQgKzcwOCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIz
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4o
Z2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZv
R1BSLCBwdXRLaW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOwogICAgIGppdC5w
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKQEAgLTMyOTAsODIgKzMxNDcsNiBAQCB2b2lkIEpJVDo6ZW1p
dEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNo
LCBDYWNoZWFibAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotCi0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSBmYWxzZTsKLQot
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAg
bmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0Zv
cldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShh
cnJheU1vZGUpOwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRy
LCB0eXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUg
QmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBDdXJy
ZW50bHksIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZlciBjb21lcyBoZXJlLgot
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MTE4MwotICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgICAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBu
dWxscHRyLCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAg
aWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQocmVtb3ZlQ29k
ZVB0clRhZyhtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJsZUFkZHJlc3MoKSkgPT0g
cmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20sIG1fZmFyQ2FsbHMubGFz
dCgpLmNhbGxlZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaWYgKCFp
c0RpcmVjdCkgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBy
ZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAot
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5B
ZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX2JhZFR5
cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8t
Pm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlwZUp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBv
cGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlz
IG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlv
bnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRp
b25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bDxPcFB1dEJ5VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLQogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXgpLnB0cigpOwpAQCAtMzQwNywyMjMgKzMxODgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAocHV0
S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92
YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0KLSAg
ICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnl0ZWNvZGUs
IHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOwotCi0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8t
PnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJ
bmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+ZXhj
ZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9uZWFy
Q2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNh
bGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJv
bSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXplKHBhdGNoQnVmZmVy
LCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHVi
Um91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNhY2hl
ZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1lLnVp
ZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVy
bkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2Vu
LnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0ID0gQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9
IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQot
Ly8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlv
biB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4
cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4oQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci10ZW1wbGF0
ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFs
RGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFTU0VS
VChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQg
ZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1Qy
OwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lz
dGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAg
ICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNj
cmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2Vu
ZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJl
c3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0K
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAg
ICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBi
cmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJy
YXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlW
YWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAg
ICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNo
LCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3Jh
dGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBs
b2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSks
IGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9w
ZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVj
aWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCkpOwotI2Vsc2UKLSAgICBlbWl0TG9hZCh2
YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBXZSB3
b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0
aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJl
cmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFn
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3Jh
dGNoMiwgZmFsc2UpOwotICAgIAotICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKLSAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICBBU1NFUlQoIUpTQzo6aXNT
aWduZWQodHlwZSkpOwotICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIEp1bXAgdG9v
QmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4
ZmYpKTsKLSAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgICAg
ICBKdW1wIGNsYW1wZWQgPSBqdW1wKCk7Ci0gICAgICAgIHRvb0JpZy5saW5rKHRoaXMpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgY2xh
bXBlZC5saW5rKHRoaXMpOwotICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIH0KLSAg
ICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSAxOgotICAgICAg
ICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc09uZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIHN0b3JlMTYo
ZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3bykp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHN0b3JlMzIoZWFybHlTY3Jh
dGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlwZWRBcnJheVR5cGUg
dHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7Ci0gICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsK
LSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0
ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0Owot
I2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3Bl
cnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBS
ZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRj
aDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAK
LSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBl
YXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBp
c0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMy
KHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNv
bHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBl
KSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0
eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJvZmls
ZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChq
dW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAg
IEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKTsKLSAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIoZWFybHlTY3JhdGNoKSk7Ci0gICAgYWRkNjQobnVtYmVy
VGFnUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9Eb3VibGUoZWFybHlTY3Jh
dGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICBlbWl0TG9h
ZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNl
ID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3Vi
bGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAg
IGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFi
b3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAg
ICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDApOwot
ICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBXZSB3b3VsZCBiZSBs
b2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBz
bG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3Io
KSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdl
OjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMiwgZmFs
c2UpOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBjYXNlIDQ6
Ci0gICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZwUmVnVDApOwotICAgICAg
ICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRp
bWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICAgIHN0b3JlRG91
YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggYjk4YmZlY2VkYWE1NTYwMWY5NWE4
OGJlZGE2MWIwOWYxYTM0MzQ3MS4uODFhMzFlNjA4NjkzODc3MTZkYmFkYjQ5NmNjOTdjNjI0YTg0
YWU3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCkBAIC00NjYsMTUwICs0NjYsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVt
aXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAgUGF0
Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2Uobm90SW5k
ZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsIHBy
b2ZpbGUpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgaW5saW5l
PwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMSwgVHJ1c3RlZElt
bTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBl
TWFzayksIHJlZ1QxKTsKLSAgICAKLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5
TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEpJVEludDMyOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwg
YnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJ
bmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZh
bEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlw
ZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5
cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9w
IGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
SW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CisgICAg
UHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWw+ID8gUHV0S2lu
ZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGlyZWN0OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
LSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29udGlndW91c1NoYXBl
KSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBl
bWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUp
IHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVn
VDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3Jl
MzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1Qx
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVn
VDMpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAg
SnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgp
OwotICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgbW92ZUludHNUb0RvdWJsZShy
ZWdUMCwgcmVnVDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
TmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVE
b3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAg
Ci0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QyLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJl
c3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVy
biBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MywgcmVnVDIpOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDYpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlLCByZWdUMSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAot
ICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwot
ICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1
LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnLCBlY21hTW9kZSwgcHV0S2luZCk7CisgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBKdW1wIGVtcHR5
ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAg
Ci0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGlt
ZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBwYXlsb2FkCi0gICAgc3RvcmUzMihyZWdU
MSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7IC8v
IHRhZwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0g
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgIGJyYW5jaDMyKEJlbG93
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0
LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJu
IHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2Rl
IHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC02MTksMTIgKzQ5NywxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpA
QCAtNjMyLDIxICs1MTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAg
ICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CisKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAKKworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNl
bGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFS
TS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4K
LSAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5
LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMiwgcmVnVDEsIHByb3Bl
cnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBieVZhbEluZm8sIFRydXN0
ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFk
ZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJl
Z3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOworCisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggMzdhODBiMjk1NzcyMTBmMzVl
MDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5OTAzMTNjYTRhYjc5ZDE5NDNmOGM4
MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC01NjgsNTMg
KzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwogICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7CiB9
CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlT
bG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAg
c3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0Owot
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICBzd2l0Y2ggKHB1dEJ5S2lu
ZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2lu
ZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgewor
ICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4g
cG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0
S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkK
K3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemlu
Z1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBw
dXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAg
ICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0g
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VS
VChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6
CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERp
cmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgc3dpdGNoIChwdXRL
aW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAg
Ly8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC02
ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
T3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIs
IGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgsMTIgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExPR19JQygoSUNF
dmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xv
dC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHko
KSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0
QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQ
dXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1LDEyICs4NzYsMTA2IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaFB1dEJ5
SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0g
ICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZh
bHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2lu
ZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUu
aXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRl
eC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1
bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKKworICAgICAgICBKU0Nl
bGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJ
bmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChi
YXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9h
dDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMK
KyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBU
eXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5n
U2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
SWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2Rl
KCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZv
LCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3co
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEFy
cmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIGlmICh0
cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4
LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RH
ZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBl
Y21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKyAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsK
QEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW4KICAgICB9CiB9
CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCiB7Ci0gICAgdXNpbmcg
RnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJl
dF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJ
bmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlvblR5cGUgb3B0aW1pemVkRnVu
Y3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rp
b25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7
CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
bykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1p
emVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2Fs
bFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KIAogICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cisg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKKyAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgcmVz
ZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKaW5kZXggYzE5
ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhlNi4uZWNlMzc3ZWUxMGEyZWY4NGEy
M2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgK
QEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlLaW5kIHsKICAgICBQcml2YXRlTmFt
ZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZh
bCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAgICBCeUlkLAogICAgIEJ5VmFsCkBA
IC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQgewogCiB2b2lkIHJlcGF0Y2hBcnJh
eUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1Zh
bHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25z
dCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJl
cGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0
dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNH
bG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9k
ZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVwYXRjaEhhc1ByaXZh
dGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7CkBAIC02OSw3
ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2
b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJp
YW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3YjE1Mjk2OTEwZDVlMGE4NzE1NWFj
NWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMwNmJjNDcxMmM1OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaApA
QCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaXMg
YSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMuIFRoaXMgaXMgbmVlZGVkCi0vLyBi
ZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeUlk
U3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1
cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNoIHJlZmVycyB0byB0aGUgb3Bjb2Rl
cyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRoICJsbGludF8iLgogLy8gSW4gdGhl
IENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1aXZhbGVudC4gSGVuY2UsIHdlIHNl
dCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>
<flag name="commit-queue"
          id="459144"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436177</attachid>
            <date>2021-08-23 03:19:12 -0700</date>
            <delta_ts>2021-08-23 20:02:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823031912.patch</filename>
            <type>text/plain</type>
            <size>307884</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWQ0NTJlN2MwODc0MjZkNWZjODgxMDBiODQ3NzYxOTRlNjJjMGQ3Li5mNjI0NmE0ZTU2YTRiMmE3
YjhhMTAxNDY5NGFkYTBkZmZkNDMwM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTcgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVj
dHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3Rv
cmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0
QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBz
KToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRl
ZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNT
dGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR01h
eUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAg
ICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICog
aml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKToK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQv
SklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXplKToKKyAg
ICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OnRyeVB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3Vz
UHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVk
QXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5j
dGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlNDOjpyZXBh
dGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5C
eSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1
dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1Jl
cGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisKIDIwMjEt
MDgtMjIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlND
XSBSZW1vdmUgYWxyZWFkeS1zaGlwcGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZh
N2EuLjMyM2Q4YTQwZTFmNmUyM2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3
RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYg
LyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0
Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0
YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjND
NiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4
NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNl
S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBD
MzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDEx
IEBACiAJCTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0
dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0
QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3Rh
dHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1
RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlW
YXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFy
aWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlG
MURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5NTJBQTAxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZl
cmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRS
ZWZlcmVuY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2
OTUsMTAgQEAKIAkJCQkwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uaCAqLywKIAkJCQkwRjE1Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNw
cCAqLywKIAkJCQkwRjE1Q0QyMTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8s
Ci0JCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAot
CQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJ
MEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkw
RjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkz
MzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQw
MDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJB
RTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNv
cmRlZFN0YXR1c2VzLmNwcCAqLywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVj
b3JkZWRTdGF0dXNlcy5oICovLApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJF
MUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
VmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8q
IFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYw
NDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2
QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTlj
MzAyMGQuLjcwNzdlZjlhZTMxMTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFt
Q29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Q
cm94eWFibGVBY2Nlc3NDYXNlLmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9S
ZWNvcmRlZFN0YXR1c2VzLmNwcAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVj
b2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3
ZTY5ODI4MGMzNWI2Li5jZTJiOGZhYjA3ZTYyZjBlZmI2MjkxYzk5MzFjZjAwMzQzYTYzZjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05
OSw2ICs5OSwxOSBAQCBSZWY8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRp
Z3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWlu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVu
dGlmaWVyQ2hlY2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MzI2LDYgKzM1MiwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVN
YXRjaCgpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJp
bmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
NzgsNiArNDE3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hl
Y2soKSBjb25zdAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5n
TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUs
MTEgKzQ3NywyNCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
IGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRT
dHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
RG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBi
cmVhazsKICAgICB9CiB9CkBAIC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9l
c0NhbGxzKFZNJiB2bSwgVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBj
b25zCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBm
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwx
OSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIp
IGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFy
cmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3Ro
ZXIudHlwZSgpID09IHR5cGUoKTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpA
QCAtOTYxLDYgKzEwNjUsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAog
ICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAg
IGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsxMTY2LDgg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNo
R1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwogCkBAIC0xMTQ1LDYgKzEyNTMsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJl
Z3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTExOTksMTUg
KzEzMDksMTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGlzRW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
UmVncyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsK
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQpAQCAtMTIyNywxNiArMTMzNiwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAogICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5k
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKIAogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwg
c2NyYXRjaDJHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZh
bHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElm
RW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQu
YnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNo
R1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9h
ZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBK
U1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0
eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJ
Z25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAg
ICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBA
IC0xMjYyLDIxICsxMzcxLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRG
UFJSZWcpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFz
ZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQp
LCBzdGF0ZS5zY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5j
aElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2hJZk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAg
ICAgaml0LmJveERvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2Fk
VmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAg
ICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRj
aEdQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpLCBKU1ZhbHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7Cisg
ICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2Ny
YXRjaDNHUFIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwg
dmFsdWVSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM5NSwyNzMgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAg
IHN0YXRlLnN1Y2NlZWQoKTsKIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0
ZXJzKCkpIHsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFm
YWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygm
aml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3Bw
aW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUu
ZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJs
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAg
ICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBh
bGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBk
b25lIGluIHBvbHltb3JwaGljIGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3Qz
MihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKENvcHlPbldyaXRlKSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3Bl
cnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsK
KworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAg
IGF1dG8gcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2Vy
dmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0
LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNl
KTsKKyAgICAgICAgfTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0
OworICAgICAgICBpZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAg
ICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3Jh
Z2VTaGFwZSkpKTsKKworICAgICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KEND
YWxsSGVscGVyczo6WmVybywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSkpKTsKKyNlbHNlCisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIEpTVmFsdWU6Om9mZnNldE9mVGFnKCkpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIHN0b3JlUmVzdWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBl
eHBlY3RlZFNoYXBlOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9
IEludDMyU2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElu
ZGV4ZWREb3VibGVTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gRG91Ymxl
U2hhcGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3Vv
dXNTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBw
ZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHBlY3RlZFNoYXBlKSkpOworCisgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZTogewor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICAgICAgYXV0byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3RJbnQubGlu
aygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMkdQUiwg
c3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQo
aml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUs
IHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworCisgICAgICAgICAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAg
ICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHBy
b3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
dmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVC
YXJyaWVyIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsK
ICAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAgICAgIGlzRW1w
dHkubGluaygmaml0KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkpOworICAg
ICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rv
ck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAg
ICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQp
OworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFu
ZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7
CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhq
aXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFt
cGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAg
ICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQg
YWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJ
bnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5z
Y3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNl
ID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91
YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNl
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNU
b0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRl
LnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAg
ICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0
aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBl
bmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwg
c2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlm
IChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBz
Y3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0g
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAg
aml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNw
YWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAg
aml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAg
ICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1
YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAg
ICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVh
dGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsK
KyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAg
IHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xh
bXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0
Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZl
cnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
Rm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7Cisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
LnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0g
SW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAg
IAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CkBAIC0xODk2LDYgKzIyNjQsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlk
R1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQ
Uik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVH
UFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKIAogICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwpAQCAtMjA1OCw2ICsyNDI4LDggQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlKCkt
PnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwpA
QCAtMjE4Myw2ICsyNTU1LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBDaGVja1ByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERv
dWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgLy8g
VGhlc2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRo
ZSBndWFyZCBpcyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBz
dXJlIHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBz
aW5jZSB0aGV5CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tz
LgpAQCAtMjE5NiwyMiArMjU4MSwzMSBAQCBUeXBlZEFycmF5VHlwZSBBY2Nlc3NDYXNlOjp0b1R5
cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBzd2l0Y2ggKGFjY2Vz
c1R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDg7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDE2OwogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToK
ICAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CiAgICAgICAg
IHJldHVybiBUeXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgogICAgICAgICByZXR1
cm4gVHlwZUZsb2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjI4NCw2ICsyNjc4LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVTaGFy
ZWQoY29uc3QgQWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3NDYXNlJiByaHMpCiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdM
b2FkOgogICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNDE5Yzk5
YzkwZjQzOTAxODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uNTYzYTE1NTJhZTQyMTY0NDA0NmQw
YWE0MWQyM2I2YWRkNWRiNjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNzIEFjY2Vzc0Nhc2UgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewogICAgICAgICBJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQs
CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQsCi0gICAgICAgIEluZGV4ZWRT
dHJpbmdMb2FkCisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAorICAgICAgICBJbmRleGVkSW50
MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAorICAgICAgICBJbmRleGVkQ29u
dGlndW91c1N0b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUsCisgICAgICAg
IEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUsCisg
ICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlLAor
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmUsCiAgICAgfTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKQEAgLTM1MywxMiArMzY2
LDEzIEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICBzdHJ1Y3QgS2V5IHsKICAg
ICAgICAgICAgIEtleSgpID0gZGVmYXVsdDsKIAotICAgICAgICAgICAgS2V5KEdQUlJlZyBiYXNl
R1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BS
LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0
aW5lKiB3cmFwcGVkKQorICAgICAgICAgICAgS2V5KEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFs
dWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYXJyYXlQ
cm9maWxlR1BSLCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhpY0FjY2Vzc0pJ
VFN0dWJSb3V0aW5lKiB3cmFwcGVkKQogICAgICAgICAgICAgICAgIDogbV93cmFwcGVkKHdyYXBw
ZWQpCiAgICAgICAgICAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKICAgICAgICAgICAgICAg
ICAsIG1fdmFsdWVHUFIodmFsdWVHUFIpCiAgICAgICAgICAgICAgICAgLCBtX2V4dHJhR1BSKGV4
dHJhR1BSKQogICAgICAgICAgICAgICAgICwgbV9zdHViSW5mb0dQUihzdHViSW5mb0dQUikKKyAg
ICAgICAgICAgICAgICAsIG1fYXJyYXlQcm9maWxlR1BSKGFycmF5UHJvZmlsZUdQUikKICAgICAg
ICAgICAgICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQogICAgICAgICAgICAg
eyB9CiAKQEAgLTM3NSw2ICszODksNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAg
ICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BSID09IGIubV92YWx1ZUdQUgogICAgICAgICAg
ICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0gYi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAg
ICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBiLm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAg
ICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQUiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAg
ICAgICAgICAgICAgICAgICAgICYmIGEubV91c2VkUmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0
ZXJzOwogICAgICAgICAgICAgfQogCkBAIC0zODMsNiArMzk4LDcgQEAgY2xhc3MgU2hhcmVkSklU
U3R1YlNldCB7CiAgICAgICAgICAgICBHUFJSZWcgbV92YWx1ZUdQUjsKICAgICAgICAgICAgIEdQ
UlJlZyBtX2V4dHJhR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1fc3R1YkluZm9HUFI7CisgICAg
ICAgICAgICBHUFJSZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIH07CiAKQEAgLTQxNiw2ICs0MzIsNyBAQCBjbGFz
cyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BS
ID09IGIubV92YWx1ZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0g
Yi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBi
Lm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQ
UiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV91c2Vk
UmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgb3JkZXJpbmcgb2YgY2FzZXMgZG9lcyBub3QgbWF0dGVyIGZvciBzaGFyaW5n
IGNhcGFiaWxpdGllcy4KICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHBvdGVudGlhbGx5
IGluY3JlYXNlIHN1Y2Nlc3MgcmF0ZSBieSBtYWtpbmcgdGhpcyBjb21wYXJpc29uIC8gaGFzaGlu
ZyBub24gb3JkZXJpbmcgc2Vuc2l0aXZlLgpAQCAtNDQ1LDYgKzQ2Miw3IEBAIGNsYXNzIFNoYXJl
ZEpJVFN0dWJTZXQgewogICAgICAgICBHUFJSZWcgbV92YWx1ZUdQUjsKICAgICAgICAgR1BSUmVn
IG1fZXh0cmFHUFI7CiAgICAgICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSOworICAgICAgICBHUFJS
ZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8UmVmUHRyPEFjY2Vzc0Nhc2U+PiYgbV9jYXNl
czsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8U3RydWN0dXJlSUQ+JiBtX3dlYWtTdHJ1Y3R1
cmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCmlu
ZGV4IDZkYzdiMGU1NDQ3ZmUwNjBkYmNiZDI0ZDk5MDk3NTY1NzlmYzY1NzQuLjkxZGE4ZjNlZmY5
MmZjM2E4OTU3MGQ3NWE0YjkxM2JkMjYzMmNjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKQEAgLTIwOCw2ICsyMDgsOSBAQCBjbGFzcyBBcnJh
eVByb2ZpbGUgewogICAgIEFycmF5TW9kZXMqIGFkZHJlc3NPZkFycmF5TW9kZXMoKSB7IHJldHVy
biAmbV9vYnNlcnZlZEFycmF5TW9kZXM7IH0KICAgICBib29sKiBhZGRyZXNzT2ZNYXlTdG9yZVRv
SG9sZSgpIHsgcmV0dXJuICZtX21heVN0b3JlVG9Ib2xlOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlQcm9maWxlLCBtX21heVN0b3JlVG9Ib2xlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
UHJvZmlsZSwgbV9sYXN0U2VlblN0cnVjdHVyZUlEKTsgfQorCiAgICAgdm9pZCBzZXRPdXRPZkJv
dW5kcygpIHsgbV9vdXRPZkJvdW5kcyA9IHRydWU7IH0KICAgICBib29sKiBhZGRyZXNzT2ZPdXRP
ZkJvdW5kcygpIHsgcmV0dXJuICZtX291dE9mQm91bmRzOyB9CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5j
cHAKaW5kZXggNzY3MWQ4N2IxZWE3NDlkYzM0NTZmNzc2NWFjMDZjNGE4YmNmYjJiMS4uYzAyNWE3
YmY2NTE5NGJkYTRlODIxNTFkOWNiM2YyOTY3OGRhOTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcApA
QCAtMTQxLDYgKzE0MSw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBjb25zCiAgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVSZWdzKTsKICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BS
KTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAg
IGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogCiAgICAgR1BSUmVnIHBhcmFtQmFzZUdQUiA9
IEludmFsaWRHUFJSZWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1
c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUzYjg0OTE3YzQ4M2Q5NTAuLjdh
MDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNz
IENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgR2V0QnlTdGF0dXM7CiBj
bGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsKK2NsYXNzIFB1dEJ5U3RhdHVz
OwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVj
dCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJQ1N0YXR1cyB7CiAgICAgQ2Fs
bExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAgICAgR2V0QnlTdGF0dXMqIGdl
dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBpblN0YXR1cyB7IG51bGxwdHIg
fTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07CisgICAgUHV0QnlT
dGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxldGVCeVN0YXR1cyogZGVsZXRl
U3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAppbmRleCA0ODQxMDEzOWRjMmY4YzBkNWM4MGEyZmY5MDVj
M2FhNmExMzVkZmIyLi5kYjc3N2U5ZWRhNGUyZmY5ZGY4ZGI5ZmEwYzc5MGE2ZWVkNWVlZTBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcApA
QCAtMjE4LDYgKzIxOCw4IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEdQUlJlZyBnZXRTY3JhdGNo
UmVnaXN0ZXIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogI2VuZGlmCiAgICAgaWYgKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEyZjMx
ZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDBkNmExZjlkYTU4MjUyMDU1NGFhYzM0
ZWMxYTQ0ZTQyOWFmODY0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC00OTQsNiArNDk0LDggQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2MKICNlbmRpZgogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9
IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7
CiAKICAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwogCkBAIC04MTAsNiArODEyLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICAgICAgICAg
ICAgIHN0dWJJbmZvLnZhbHVlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ucmVncy50aGlzR1BS
LAogICAgICAgICAgICAgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwKKyAgICAgICAgICAgIHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8udXNlZFJlZ2lzdGVy
cywKICAgICAgICAgICAgIGtleXMsCiAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlcywKQEAgLTg0
Niw3ICs4NDksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgaWYgKGNhbkJlU2hhcmVkKQotICAgICAgICAgICAg
dm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHVi
SW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBz
dHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgp
KSk7CisgICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1YlNl
dDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHViSW5m
by5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGZpbmlzaENvZGVHZW5lcmF0aW9uKFdURk1vdmUoc3R1YikpOwpAQCAtMTAy
Miw2ICsxMDI1LDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3Ry
aW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENv
bnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBl
ZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1
ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUg
IkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgi
Ci0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRz
LCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0g
ICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0m
IHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7
Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55
IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0
IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBo
YXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50Lgot
ICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAo
IXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJ
RCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkg
ewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3Qo
KSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2
bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlk
KTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5m
bzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAg
ICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJv
ZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVT
RURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwot
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1Yklu
Zm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAg
ICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9
IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZv
KTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0
ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVz
ZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nl
c3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRW
YXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFj
Y2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxl
OiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJ
bmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxs
TGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlh
bnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3Vs
dC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAg
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxp
bmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0
RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29k
ZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0
YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2lu
KTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0
dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
YmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGlu
ZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJl
c3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRG
cm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVz
dWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBj
YWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQu
aXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICBy
ZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
Y29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlk
LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNl
SW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRT
dGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0
dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8g
c2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNo
IGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJv
dyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmlu
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
TWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
IXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFu
cyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGlu
ZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3Qg
Y3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAg
ICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0
aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8v
IFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFBy
aXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVy
IGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAg
ICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxk
LiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlv
biBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRL
aW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEg
dHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAg
Ly8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAg
IC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBj
b3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1
cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGll
cyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVj
dCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0g
ICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9w
dGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlv
biBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJh
bnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAg
Ym9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNl
bmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlm
IChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlm
IChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92
YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVt
cGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9y
Jik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAo
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFy
aWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5
SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRp
b24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7
Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1h
a2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAK
LSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1w
bGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBl
bmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAg
ICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBm
b3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFu
dC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lk
IFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmlu
dCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2Fz
ZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAi
KSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoK
LSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRG
bGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8v
IEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZv
cm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29t
ZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mg
a25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMK
LSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9J
bmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0
dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQ
YXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0
IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3Jt
YXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAg
Y2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0g
TWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVz
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxl
KQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0
dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAg
IAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBj
b250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2Vu
ZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1h
dGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAg
IGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24o
KSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4m
IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXpl
KFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAg
Ci0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQp
Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAg
ICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2
b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFm
YTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNs
dWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6
OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5
SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYg
UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17
Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIu
bV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVy
ZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zm
c2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0g
ICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVz
ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAg
IHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAg
cmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
b2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsK
LSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50
IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJl
c3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZN
b3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUq
IFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1f
b2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3Ry
dWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lk
IFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewot
ICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAg
bV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0
QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChr
aW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5k
KCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkg
ewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewot
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJp
YW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRy
YW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5l
d1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0g
b3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3Ro
ZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBp
ZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQg
PSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAg
ICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0
aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0
aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0g
ICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlk
VmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwot
ICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBh
bnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAg
IGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0
cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJl
Lm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7
Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lm
Q2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJ
ZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZp
bmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2
bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZt
LmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZp
bmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAg
IG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNh
c2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAi
LCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQo
KSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5z
aXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6
ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAg
aW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFu
dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5k
IHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9u
LAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAg
ICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
Ci0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZh
cmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
Ci0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwot
ICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVy
ZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxh
Y2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29s
IHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgp
IGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBt
X2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2lj
cyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0
aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29u
c3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0
ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAg
fQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2Nh
bGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZN
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tp
bmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xk
U3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0g
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NmJjY2E2N2NmMTg2YzQ2YmRhMDMzMDZiYTA0M2MwNDBmYTdj
YTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUg
IkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1
bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6
OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHBy
b2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVk
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lk
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRp
b24pOworICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8g
aGF2ZSBhIGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2
YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMg
aXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8g
SUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisK
KyAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CisgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
IGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9u
U2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIs
IHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNp
ZiBFTkFCTEUoSklUKQorUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29k
ZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0
dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BB
UkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmln
aW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5
ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1Yklu
Zm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoc3VtbWFyeSk7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7Cisg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQor
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAgICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFj
Y2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAg
ICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVy
KCksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7CisgICAgICAgICAgICAgICAg
YXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vzcy5pZGVudGlmaWVy
KCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2
YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVz
IGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVy
ZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0
YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRl
RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vz
cy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
Cit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywg
Ynl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNp
dGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29u
dGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMg
PSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNz
ID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAg
ICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4
aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0
QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAg
ICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5k
ZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGly
ZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5k
ZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKwor
ICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAg
ICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVz
dWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBl
KCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xv
d1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJp
YnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQ
cml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFu
cyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVl
ZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4K
KyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ig
fCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBs
YWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBl
eGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBv
aW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHBy
b2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAg
ICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUg
d2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJ
VCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBo
YXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0
aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1
dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBj
YW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0
CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJl
Y2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5v
dCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAg
ICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lz
IGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0
aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5
IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9u
IGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFT
U0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7Cisg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAg
ICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0
aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KFRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
KyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBj
b25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAg
cmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCiti
b29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9
PSBNYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9zdGF0
ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV92YXJpYW50
c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6c2xvd1Zl
cnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0
QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJ
ZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
CisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlh
bnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6
Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlT
dGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZp
bmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlT
dGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgeworICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQ
YXRoKTsKKyAgICB9OworICAgIAorICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9J
bmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2lt
cGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgeworICAg
ICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBN
YWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgfQorICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1w
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFu
dHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQor
ICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworICAg
IGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRp
b247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAg
ICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1f
dmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCIoTWFr
ZXNDYWxscykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzJhMWM3
M2M4ZjQxY2ExOTJlNThkNGJlMWRlMTY2MTNkOTAwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhp
dEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVs
ZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5m
b1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNz
IFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1
Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8
Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNo
PiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJ
dCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3Jt
YXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUg
a2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRh
a2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtu
b3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzCisg
ICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9y
bWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3Rh
dGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8
IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5
U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChz
dW1tYXJ5KSB7CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgor
ICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0
aDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRh
a2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2Fs
bHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAg
ICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNv
ZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0
dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxk
UHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29u
dGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4p
OworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9J
bmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsg
fQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJz
aW9uKCkgY29uc3Q7CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAx
PiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0
QnlWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5k
ZXhdOyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5n
bGVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0
aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4
KTsKKyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7Cisg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVj
dG9yPFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlW
YXJpYW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQorewor
ICAgICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5t
X2tpbmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1
cyA9IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRl
bnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1
dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7Cisg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJp
YW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJh
bnNpdGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAg
cmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVy
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmll
cikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtT
dGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTdHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAh
PSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2Fy
eSgpCit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFj
ZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFy
aWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtp
bmQoKSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
aWRlbnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNl
IE5vdFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAg
ICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJh
bnNpdGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsK
KyAgICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNp
dGlvbldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5z
aXRpb246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2Vk
Q29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlv
blNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFNldHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVz
IHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExp
bmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9u
U2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFt
ZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25l
U2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExp
bmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2Up
Cit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFj
ZS5tX2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9v
ZmZzZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFT
U0VSVCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2Uu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVy
Z2luZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQg
YSBuZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGls
ZSB0aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0
CisgICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhl
IHJlcGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNT
dG9yYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5t
X29sZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVj
dHVyZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJ
TkVfVklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9u
ZXdTdHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChT
bG90VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQorewor
ICAgIGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25l
d1N0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9j
YWxsTGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IjwiKTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVt
cHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAg
ICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAg
b3V0LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRl
eHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIs
ICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0
YXR1cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZh
cmlhbnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtT
dGF0dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBS
ZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAg
IAorICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAg
ICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQor
ICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVy
KFdURk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29u
c3QgUHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2Fj
aGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAg
IAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xk
U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVj
dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24g
fHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVy
biBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2Ug
fHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5z
aXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmRpdGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBm
b3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlz
IGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Qg
eyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1w
bGF0ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxM
aW5rU3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAh
PSAhIW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVy
ZVNldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5z
aXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAg
IEtpbmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVy
ZVNldCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVs
bHB0ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcu
LmZjZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYy
LDEwICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3Rh
dHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0
YXR1cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewot
ICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0
YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0
dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dy
ZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0
cykKICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZv
ciAoYXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vj
b25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxl
dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVk
U3RhdHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5
ODNkYmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3
IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0
YXR1c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMq
IGFkZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwot
ICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRk
SW5CeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERl
bGV0ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
RGVsZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsK
ICAgICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1
cz4+PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVf
cHRyPEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM+Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNl
YjIzZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3
ODE5ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJs
b2NrKiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVz
ZXRHZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJ
RChjb2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAg
ICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxv
Y2ssICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4
ZTZlMjUwMWFhYjE4ZTU1ZDQxYTQuLmU2N2JjMTA4YmUzMjBkZDZkMjU5ZTc3YzgxYjlkNTFjNDVj
ZjU4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFs
LAotICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAg
ICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtMzY1LDYgKzM2Niw3IEBAIGNsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgR1BSUmVnIGJyYW5kR1BSOwogICAgIH0gcmVn
czsKICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJS
ZWcgbV9hcnJheVByb2ZpbGVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFI7CiAgICAgLy8gRklYTUU6IFszMi1iaXRzXSBD
aGVjayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMx
N2IyODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3Ry
dWN0b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0
dXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJh
bmRTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0
cnVjdHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVj
dHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmls
dGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3
ICszOTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1Zh
bHVlLm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVh
bGx5IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7
CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAg
ICAgbmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00
MTQwLDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRl
KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWRE
aXJlY3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBh
dXRvIHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJ
ZCA/IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5v
bmUoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUu
dG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlm
aWVyKCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LAogICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAg
ICAgICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2Qp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdT
dHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAt
NDQ3Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRP
SzoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAg
LTQ2NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0
ZSgpKQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9z
dHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1
cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQy
MGRmYjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUz
ODZiNjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xh
c3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJ
ZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi43ZjQwMmU2OTdm
OWRhMDdhNGM1NWFkYTUxMmM0NzlkYzRmMjIzNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hl
Y2twb2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03
NCw3ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUg
IlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBC
eXRlQ29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAg
Ci0gICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3Jt
IG9mIFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQg
YW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAg
IE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7
CiAgICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0
dXMpOwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNE
aXJlY3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFN
b2RlKTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5
U3RhdHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5k
ZXgsIEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAg
ICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1
dEtpbmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2
YXRlRmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUp
OwpAQCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAg
ICAgICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4g
b25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAg
ICAgLy8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUg
b24gdGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlv
dXNseSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0
cnVjdHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVt
ZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0
YXR1cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25l
IGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdl
dEJ5U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
cmlnaHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZl
ciwgdGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRo
ZSBmdXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5
Myw5ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxv
YWRlZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUq
IHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3Ry
dWN0dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
LCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24s
IE5vZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlk
KAotICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSog
dmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3Qs
IEVDTUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQog
ICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJ
bmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFw
aChwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9w
SW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAg
ICBhZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1
cywgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVj
bWFNb2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVj
dCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAg
IGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlh
bnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8
ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmlu
ZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRp
ZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9w
bGFuLmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5p
c0ZUTCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlv
bnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxp
bmluZ0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAg
ICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGlj
QWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNE
aXJlY3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAg
ICBpZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0g
cHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAg
ICAgIGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCAr
NTAzOCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3Rh
dHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsK
KyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52
YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRp
UHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRT
dGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52
YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSks
IGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQo
cHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBw
dXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAg
Y2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCku
YWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJh
c2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwg
YmFzZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwg
dmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAg
LTUwNjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2
YXJpYW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7Cisg
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRW
YXJpYW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNl
IFB1dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAg
ICAgTm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAg
ICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVm
YXVsdDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFz
ZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAg
IGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMs
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8
ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewor
ICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBP
cEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwo
KSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwg
cHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9s
eW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNp
emUoKSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlv
bnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcElu
Zm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBo
LmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwor
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZv
ciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkg
ewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsK
ICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAg
ICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRz
KCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNb
MF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewog
ICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3Jk
ZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJ
ZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAg
c3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
OiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJU
KHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmls
dGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwg
YmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVP
cmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0
aW9uU2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlP
ZmZzZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0
QnlJZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3At
Pm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29k
ZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhl
IGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8g
YmVjb21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMg
bm8gaW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29t
ZSBpbmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hl
ZCBjZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
Njc3OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAg
ICYmIGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxl
QXNQdXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBi
eVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmll
ci5pc1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAg
ICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAg
ICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHBy
b3BlcnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5l
U3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCkpOworCisgICAgICAgICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCku
ZW5zdXJlKHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFw
aC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0
eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAgICAgICAgICAgICAg
ICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBj
dXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQ
cml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUs
IHN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29t
cGlsZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAg
ICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQp
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9w
SW5mbyhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1
NTYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlk
U3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3Rh
dHVzIHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAg
ICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5l
Y21hTW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVj
bWFNb2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAg
ICAgfQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNo
R2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVz
OwogICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwg
ZmFsc2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0
ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3Rh
dHVzOjpUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlh
bnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5r
aW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0
KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTg4MTksNDUgKzg4MDgsMjcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhp
dEluZGUKICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICBib29s
IGlzRGlyZWN0ID0gQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0Owog
ICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgUHV0
QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVj
b2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBi
eXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJl
Y29tZXMgbnVsbC4KLSAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5m
b3JtYXRpb24uCi0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICYm
IGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29r
U2xvd1BhdGgKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZhbEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAg
ICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50
aWZpZXIudWlkKCkpOwotICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGZyb3plbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICBpZiAoIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7
CisKKyAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAorICAg
ICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlk
ZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50
aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9n
cmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZp
ZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9s
KCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJ
bmZvLCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkp
OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0
SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5
SWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQot
ICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVt
YmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNv
ZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA5MTY0NzBkMTdk
NTNhZjM1NmJkNTE0NGM5NGU2MDdkYTA3OTU4YjRhLi42ZjIwNGQyYzVkZTBhNjEyZjczMWM5NTdi
NDYxZGNmMzBjNGExMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaApAQCAtNTY5LDcgKzU2OSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2Fz
ZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czoKICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRC
eUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKaW5kZXggODZhM2QwNzY2NGQ3ZmE5Mjc1MTI5
OTc3OWY0NmYxOTcyYjBhZDBmMy4uNGNlOWZmMGViNWRhNTEwZWMyMzQwNjQ2MmE3MWU4ODA5NTA5
NjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0
YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAppbmRleCBlYWVhZjg1ZWEyNTQxNzI1NzU1ZjQ4Y2VmZGVkZTAzYjgxYzlmYTJhLi5iODgy
NWFjYWUzNGU1NWY4OTI2NTkxMjk4NDFkOTMyNGE0MGMxNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMzgs
NyArMzgsNyBAQAogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNz
IENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAK
IAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlWYXJpYW50
JiB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKS5nZW5lcmljRmlsdGVyKFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5jb250
YWlucyhtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSkpOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKQEAgLTUxMywxMSArNTEzLDkgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UodmFyaWFudC5pZGVudGlmaWVy
KCksIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CkBAIC0xMjEzLDcgKzEyMTEsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zm
c2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNl
VmFsdWUsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwog
ICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTIyNCw3ICsxMjIy
LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRp
b24qIHRyYW5zaXRpb24gPSBudWxscHRyOwotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgdHJhbnNpdGlvbiA9
IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICB9
CkBAIC0xMjY5LDcgKzEyNjcsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3Bl
cnR5U3RvcmFnZSwgY2hpbGRFZGdlKTsKICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNh
bkV4aXQ7CiAKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIGlmIChkaWRBbGxvY2F0ZVN0b3JhZ2UpIHsKICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRl
cmZseSwKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICBpZiAoIWJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc0Zp
bml0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgc3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgUHV0QnlTdGF0dXMgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgYmFzZVZhbHVlLm1fc3Ry
dWN0dXJlLnRvU3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVu
dGlmaWVyKCkudWlkKCksCisgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCks
CiAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAg
aWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKQEAgLTE0MjQsOCArMTQyMiw4IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKIAogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
LSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJp
YW50cygpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hDb25kaXRpb24o
Y29uZGl0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0OCw3
ICsxNDQ2LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAg
ICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlW
YXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0
S2luZC5pc05vbmUoKSB8fCBwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwogICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFudC5jb25kaXRpb25TZXQoKS5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAg
Y2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBhbHJl
YWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZv
bGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyUHV0QnlJ
ZFN0YXR1cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yywgc3RhdHVzKSksCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQ
dXRCeVN0YXR1cywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50
aWMsIHN0YXR1cykpLAogICAgICAgICAgICAgRWRnZShiYXNlTm9kZSkpOwogCiAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVp
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNjBmYmIxNWM1
OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2MzN2UxOGYxZS4uZTY0ODE2N2MxMTg2YmM4YzkzZjMyZThj
NTRiZTc1MTgzMGVmMTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKaW5kZXggYWE0OTY0ZTlhNWNmMmQ1NmM2NDgzZDIyYWJiYTY2NzJhYzczODUw
OS4uZGU0ZjIzZmJhYTBjOTZkYmM4YWFjNTI0OTE1M2Y5ODZlMzk4YTI2MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yODY1LDcgKzI4NjUsNyBA
QCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJbnRy
aW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzLi4w
YWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBE
dW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVzKCkp
OwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChjb21t
YSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMo
KSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAg
ICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAq
bm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRhZGF0
YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBub2Rl
LT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkx
MGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAw
YzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
Z2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0
QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxz
LCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5r
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAz
OWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2
ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIEND
YWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9p
ZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdl
bmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7Cisg
ICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdl
biwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgbV9kZWxCeUlk
cy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xv
d1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBD
Q2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1
dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0
b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5
ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIy
MGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApA
QCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRC
dXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFi
YWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4
YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3
IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0
QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQ
cml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNs
dWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nl
c3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7
CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3
cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFz
UHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRCeVN0YXR1cygpCiAgICAgewotICAgICAg
ICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3RhdHVzOworICAgICAgICByZXR1cm4gb3Ao
KSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyog
cHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkpOwotICAgICAgICByZXR1cm4gbV9vcElu
Zm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygp
KTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAK
ICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQw
Li45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQxNmVhYmViYjllMjIyMzVlMTdlOGIuLjI4
OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2JlZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAg
LTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KIAogICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2Rl
SUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgY29tcGlsZSBv
cF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGluZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4g
d2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRoaXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAg
ICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9zc2libGUgdGhhdCB3ZSBjYW5ub3QgZmlu
ZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNj
ZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJhc2VsaW5lIENvZGVCbG9jayAoQSkgaXMg
Y29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4gKEEpIGdldHMgREZHIChCKS4KLSAgICAg
ICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVjdHMgZW5vdWdoIGluZm9ybWF0aW9uIGZv
ciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1cmVTdHViSW5mbyBmcm9tIChBKSBhbmQg
Y29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxsLgotICAgICAgICAgICAgICAgIC8vIDQu
IChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNlIGl0IGlzIG5vdCBleGVjdXRlZC4gVGhl
biwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAgICAgICAgLy8gNS4gVGhlIENvZGVCbG9j
ayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28gKEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkg
ZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9jayBhZ2Fpbi4KLSAgICAgICAgICAgICAg
ICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3Ry
dWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlkIChvcmlnaW5hbGx5LCBwdXRfYnlfdmFs
KS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChBKSdzIEpJVERhdGEgaXMgY2xlYXJlZCBv
bmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRl
eCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAg
ICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0Vu
dHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKICAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2
ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNz
IE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFw
cHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5j
b21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50
OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFy
aWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1
LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFk
ZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4
MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNs
YXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
Y2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAw
ZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5
ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
QEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAKICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6
Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0
dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmlu
ZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0ZTJkNmI1ZDk5M2ViNmIuLjYwM2ZmN2IyZTUy
ZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEw
YzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEwYTRjLi5jOGZjMTU3NDE1OWQ0NDZjZGVjODll
ODdjZDcxOGQzMGE1MjAxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTU4NzEsNyArNTg3MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlcklu
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBm
Li5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNz
IFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYx
YTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApA
QCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEs
NyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1
MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRj
aFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmls
dGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2Ug
RmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4ZWY3MTAwLi5jMzlmMmRkZjM3
NTM2MzFiMTUyODUxMWFiYzkwZTcxYTUwYTMwN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoK
ICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0
ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpA
QCAtODk1MSw3ICs4OTUxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9y
PFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJh
c2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tp
XTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCku
c2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClb
al0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2
ICs4OTY2LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSAr
IDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFj
ZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAg
bV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKTsKQEAgLTg5ODcsNyArODk4Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZv
KCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUz
OWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3
N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0
MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xp
c3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxk
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0
YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1
cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJm
YzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMz
NmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCAr
NjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1
dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRk
QWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBt
YWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisg
ICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0
aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxm
UGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERl
bEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVh
NWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0
NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1
MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlW
YWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRC
eUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRl
eCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsK
QEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNX
aXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1f
cHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0g
bV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09
IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4
ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkw
OSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRC
eVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRz
LCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVm
ZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDY0NDBmZjI0MTBmMDM3MmQxYjVmYjdm
MDU3N2ZkNzBmNDllMjA1NTguLmYwZTBmZWMyZWZjNTQyYzVhZTlmOWMyODkyNzEyNTgxZWY1Zjhk
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0g
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIs
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2Rl
QmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0
QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
KQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0y
NjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMzgyLDM4ICszNTYsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFy
cmF5UHJvZmlsZSopOworICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9s
ZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAg
ICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdU
MiBjb250YWlucyBpbmRlY2luZyB0eXBlLgotICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUg
aXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAotICAgICAgICAv
LyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVh
ZHkgcHJvZmlsZWQuCi0gICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBJbnQzMlNoYXBlKTsKLSAgICAg
ICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dERvdWJsZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIERvdWJs
ZVNoYXBlKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
ID0gQ29udGlndW91c1NoYXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBl
KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNt
YU1vZGUoT3ApOwpAQCAtMTA2NCw2ICsxMDA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAgICAgIFZlY3Rv
cjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICAg
ICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAgICAgIFZlY3Rv
cjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRJ
bkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlWYWxHZW5l
cmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2VuZXJhdG9yPiBt
X2RlbEJ5SWRzOwpAQCAtMTA5MSw2ICsxMDM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVk
IG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBt
X3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlWYWxJ
bmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5kZXggeyBVSU5U
X01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAg
ICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmlu
ZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLjRmYWU1YWQ2NzFm
ZDBlYjVmZjU3MTA1N2I0YWQ1MzBhNDA0MWM3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsNyArMTQy
LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3Io
Y29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0
LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9H
UFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQo
cHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjggQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRv
cjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQog
ICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgYXJyYXlQcm9maWxl
R1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtp
bmQpCisgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1vZGUoZWNtYU1v
ZGUpCisgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNlKQorICAgICwg
bV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsK
KyAgICBtX3N0dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5bG9hZEdQUigp
OworICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyAgICBtX3N0dWJJbmZvLT5t
X2FycmF5UHJvZmlsZUdQUiA9IGFycmF5UHJvZmlsZUdQUjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgIG1fc3R1
YkluZm8tPnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+di5w
cm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisKK3ZvaWQgSklU
UHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkK
K3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7CisgICAgICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQdXRCeVZhbEdl
bmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQ
YXRoKQoreworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOworICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRy
ID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJVE9wZXJhdGlv
bl9HU3NpSkpDIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9uKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fcHV0S2luZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
aWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpOwor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAg
ICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgLy8gTWFr
ZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVn
IHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXgg
ZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uM2NlNWQzN2QyYzQwZGM5
OTA0OWUxMmFkNTMxNGI4OTVmNGMwMzQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNs
YXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRC
eUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAg
ICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAg
ICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFs
dWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9u
X0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1f
ZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9
OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJh
c2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAg
ICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NU
eXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVn
IGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSwgUHV0S2luZCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1NldCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIGZpbmFsaXpl
KExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5r
QnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwor
CisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CisKK3ByaXZh
dGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OworICAg
IFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNs
YXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJs
aWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDc3NDRiNTA4Mzdh
ZWE3YmEwODVhMDEzNDVmYmJmMmI2OGJmMGQ0MjUuLjk4ZmQwMGYwZDU3MWE1OWNiNjIyYTQxYTRm
NzMwM2E5ZDNmYzc5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBA
IC0zNTQsNiArMzU0LDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRlCiAgICAgbG9hZDgoQWRk
cmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIGluZGV4aW5n
VHlwZSk7CiB9CiAKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Cisg
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSkpOworICAgIH0KK30KKwogaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSkKIHsKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NP
Zk1heVN0b3JlVG9Ib2xlKCkpOwpAQCAtMzY0LDI0ICszNzIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVz
c09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VB
cnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIGF1dG8gYXJyYXlQcm9maWxl
U2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkp
IHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhh
cnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAgICB9OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1v
ZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7Ci0gICAgaWYgKGFycmF5
UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRE
b3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkK
LSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlN
b2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdl
OwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCiBBTFdBWVNfSU5MSU5FIGludDMyX3Qg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDI0ZDlmNWVkZjg3MTU4MzhkNzc1
YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2MzI4MWUzNWRmZTU1ZmFlMjA2MTAwYTE1ZGE5NzE5
YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwg
c2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9
CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1
MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplYwogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xv
dCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAK
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4
Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYgogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90
LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEz
LDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmllbGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5
cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vz
c1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBj
b2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNo
UHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJl
LCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZSk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0
dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwxNiArOTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZv
aWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNs
b3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xk
U3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJ
ZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGlj
IHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21h
TW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gKmlu
ZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBA
IHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiArOTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAg
IHJldHVybjsKLSAgICB9IAorICAgIH0KKwogICAgIGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkg
ewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxl
LT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8t
PnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVy
Q2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkp
KQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5p
c1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVy
dHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNt
YU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUg
dmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAq
bWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgp
KSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUo
KSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRo
czo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3Bl
cnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIzLDIyNiArMTAxOCwyMDYgQEAgZW51bSBjbGFzcyBP
cHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdpdmVVcCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRp
b25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0QnlW
YWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNN
QU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Ci0KLSAgICAv
LyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25S
ZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6
ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
ICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5pbmRleGluZ01vZGUoKSkp
Ci0gICAgICAgIHJldHVybiBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLQotICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotCi0gICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXph
YmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRp
bWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVG
b3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJt
aXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+
aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2Nr
ZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCwgZWNtYU1vZGUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRv
IHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdl
dCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRp
bWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICAgICAgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0
KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1i
b2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpOworICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAot
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2Vlbikgewot
ICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVk
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0g
bGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0s
IGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8t
PmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikp
CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0
QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0
aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlv
blJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElm
IHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRo
ZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWlu
LiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAg
Ly8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5
IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJl
IHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAg
Ly8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1Bh
dGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAot
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVz
dWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXAp
IHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0
YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3Bl
cmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
YnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
c3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLXN0YXRpYyBPcHRp
bWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQorSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgot
ICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBz
dHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVy
ZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERpcmVjdChhcnJheU1v
ZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgeworICAgIGlmICghaXND
b3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50
MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2
bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZSkgewog
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ss
IGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBhdGNoQXJy
YXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
ICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIH0KKyAgICB9
CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50
aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
LmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFi
bGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewogICAgICAgICBjb25z
dCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlv
blJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElk
PE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgUHV0S2luZDo6RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBs
aWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBl
Y21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOworCisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxT
dHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBDb21tb25TbG93
UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgp
KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXBhdGNoUHV0
QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlm
aWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6OkRpcmVjdCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1p
emF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXph
dGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8v
IElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5n
IHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFn
YWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAg
ICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVu
aXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5
IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAg
ICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xv
d1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIAotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1v
ZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQg
cmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkg
ewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1Mp
LCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KIAotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1
YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBkaXJlY3RQdXRCeVZh
bE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgp
KTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
Yywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFN
b2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAgZGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpz
bG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVD
TUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
KworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVl
LCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHVi
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkp
OworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwot
ICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisKKyAgICBzdHViSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNP
YmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09i
amVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgZGly
ZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQs
IHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCcmFu
ZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDI1ODRl
OTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgxZDVmMTk5OTguLmVmYmQ4ODczNTQyZmMzZjRiZTgz
ZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywxNSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZQog
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7Ci1KU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyos
IEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOworCitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwogCiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRUNNQU1vZGUpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxG
cmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA1NjY4ZGZiZTQxZDEy
YTkyMjRhNDNjMDg4MTM0ZTNjYzVjODRjYzdlLi4wZjM5ZWMwMDMxMmJmY2IzODkyOGMzNTg4N2M4
MjY5YTcyMTYxY2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3NyArNDM4LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2Vj
bWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5
VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHBy
b3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92
ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVs
c2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYg
KCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0byBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRl
QWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdU
MSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMy
VG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBz
aG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcmVnVDMpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKIAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZh
bEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENS
QVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCwgZWNtYU1vZGUsIHB1dEtpbmQpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwot
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFs
SW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVt
cChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotCi0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBv
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVS
ZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKLSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0g
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QzKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAg
ICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJl
Z1QzKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGlu
ayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7Ci0gICAgc3RvcmUzMihyZWdU
MywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0g
ICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVz
cygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIH0gZWxzZQotICAgICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQo
WmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlNjQocmVnVDMsIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0
eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNl
KHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgYnJhbmNoMzIoQmVs
b3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLQotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTog
VXNlIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8g
cmVkdWNlIGNvZGUgc2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJC
YXNlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02NjEsMTIgKzUxNiwxNSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC02NzQsMTYgKzUzMiwxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJ
bmRleCsrXTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QzLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02OTQsMjggKzU1Mywy
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIz
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHByb2ZpbGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09w
ZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAg
ICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTczNiwxOCArNTkzLDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0g
YXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1l
bnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7
CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQ
Uiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlv
bih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGpp
dC5yZXQoKTsKIApAQCAtODA5LDEzICs2NjYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0g
YXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50
R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNl
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
dmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9H
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpA
QCAtODUxLDE0ICs3MDgsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBh
cmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVj
dEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+
KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5m
b0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkwLDgyICszMTQ3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRj
aCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAg
IG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtG
b3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUo
YXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0
ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXpl
IEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4K
LSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwg
bnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAg
IGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNv
ZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09
IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxh
c3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICgh
aXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0
dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwg
cmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2Ugewot
ICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJU
YWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJu
QWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRU
eXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihi
eVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZv
LT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDog
b3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBp
cyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRp
b25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0
aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0
dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDcsMjIzICszMTg4LDYgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2lu
ZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1
dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlf
dmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigp
OwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0g
ICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2Rl
LCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6
OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZv
LT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFs
SW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQot
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4
Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVh
ckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAg
IGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChj
YWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZy
b20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZl
ciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNo
ZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51
aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1
cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdl
bi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24g
PSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0K
LS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRp
b24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBl
eHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyos
IFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxh
dGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZh
bERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxl
SWRlbnRpZmllcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdU
MjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0g
ICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVT
Y3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNl
bmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwot
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0g
YnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFy
cmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5
VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAg
ICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAg
bG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
LCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJv
cGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3Bl
Y2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGlu
Qm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQo
dmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ug
d291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQg
dGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2Ji
ZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRh
ZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2Ny
YXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6Omlz
U2lnbmVkKHR5cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JF
cXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRv
b0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigw
eGZmKSk7Ci0gICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAg
ICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOwotICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNs
YW1wZWQubGluayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0g
ICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAg
ICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNPbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2
KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2Ny
YXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7
Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxh
dGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsK
LSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAg
UmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0
Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAg
Ci0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
ZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8g
aXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0z
Mih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJz
b2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlw
ZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUo
dHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2Zp
bGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
anVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAg
ICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAg
Y29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJl
YWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJl
clRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2Ny
YXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExv
YWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2Fz
ZSA9IGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAg
ICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0g
ICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsK
LSAgICByZWFkeS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUg
bG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUg
c2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9y
KCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZh
bHNlKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0
OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAg
ICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURv
dWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IGI5OGJmZWNlZGFhNTU2MDFmOTVh
ODhiZWRhNjFiMDlmMWEzNDM0NzEuLjgxYTMxZTYwODY5Mzg3NzE2ZGJhZGI0OTZjYzk3YzYyNGE4
NGFlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcApAQCAtNDY2LDE1MCArNDY2LDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBl
bWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBh
dGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdElu
ZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBw
cm9maWxlKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGlu
ZT8KLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEsIFRydXN0ZWRJ
bW0zMihDb3B5T25Xcml0ZSkpKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spLCByZWdUMSk7Ci0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJh
eU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFs
SW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlW
YWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5
cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9
IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRU
eXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAg
IFB1dEtpbmQgcHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtp
bmQ6Ok5vdERpcmVjdCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFw
ZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAg
ZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBl
KSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9y
ZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdU
MSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJl
Z1QzKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAg
IEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAo
KTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUo
cmVnVDAsIHJlZ1QxLCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3Jl
RG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAg
IAotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMiwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVS
ZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1
cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVn
VDMsIHJlZ1QyKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1Q2KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDYsIHJlZ1Q3KTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAK
LSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsK
LSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdU
NSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZywgZWNtYU1vZGUsIHB1dEtpbmQpOworICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgSnVtcCBlbXB0
eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAg
IAotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVn
VDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOyAv
LyB0YWcKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMp
OwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwot
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxv
dywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7Ci0gICAgCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIHJldHVy
biBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29k
ZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtNjE5LDEyICs0OTcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFN
b2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewog
ICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAg
ICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkK
QEAgLTYzMiwyMSArNTEzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQog
ICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOworCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCisKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwogICAgIC8vIFRoZSByZWdpc3RlciBz
ZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBB
Uk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMu
Ci0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0
eSwgcmVnVDMsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9w
ZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvLCBUcnVz
dGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5B
ZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVS
ZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEwZjM1
ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQxOTQzZjhj
ODFkN2YyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4LDUz
ICs1NjgsOTQgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwog
fQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3Qg
UHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAg
IHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsK
LSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6
Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRCeUtp
bmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtp
bmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgor
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2lu
IHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1
dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUp
CitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQg
cHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0g
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwot
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZTsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlk
OgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3RE
aXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAg
IC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQor
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAt
NjgyLDggKzcyMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVy
YXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlJZFNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0
ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2Vy
LCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlO
YW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwg
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNs
b3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5
KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3Vs
dC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkg
PyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRC
eUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0Qnko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9
PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtp
bmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5k
ZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlND
ZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNz
SW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAg
ICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQx
NjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxv
YXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElD
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2Ug
VHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGlu
Z1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAg
ICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93
KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hB
cnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAo
dHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRl
eCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCkBAIC05ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
CkBAIC0xNzU2LDI4ICsxODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQog
fQogCi12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5n
IEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpOwotICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHVi
SW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1
bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0
aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUp
OworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1Yklu
Zm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5k
OjpCeVZhbDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGlt
aXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0Nh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2Vu
ZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJl
c2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgRGVsQnlLaW5kIGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMx
OWYwMmQ0ZDQwMTk1ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRh
MjNkOWVjMmRkNDhjZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
CkBAIC00Myw2ICs0MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5h
bWVCeUlkLAogfTsKIAorZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlW
YWwsCit9OworCiBlbnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApA
QCAtNTYsNyArNjEsOCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJy
YXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNW
YWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29u
c3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCBy
ZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRCeUtpbmQsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1v
ZGUpOwogdm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2Jq
ZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2
YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjks
NyArNzUsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwog
dm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhp
Y0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFy
aWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBH
ZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEJ5S2luZCk7CiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBEZWxCeUtpbmQpOwogdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVh
YzVjNDJkZDNiLi43MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgK
QEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlz
IGEgc2V0IG9mIGFsaWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8g
YmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJ
ZFN0YXR1cy5jcHApCisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0
dXMuY3BwIGFuZCBQdXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29k
ZXMgZXhwZWN0aW5nIHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRo
ZSBDTG9vcCBpbXBsZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBz
ZXQgdXAgdGhpcwogLy8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436260</attachid>
            <date>2021-08-23 20:02:26 -0700</date>
            <delta_ts>2021-08-24 09:18:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210823200226.patch</filename>
            <type>text/plain</type>
            <size>331394</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi44OTgyNWUzMjEzYmUwN2Uy
NWYyZWRhOWVkYWQ2NjEwNWZlZWJkZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDEgQEAKKzIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OlB1dEJ5U3RhdHVzKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29t
cHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFw
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1
dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQ
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4
aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1
cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rp
b24pOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAq
IGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpkaXJlY3RQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjpkaXJlY3RQdXRCeVZhbE9wdGltaXplKToKKyAgICAgICAgKEpTQzo6
dHJ5UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRyeURpcmVjdFB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRp
Z3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJ
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaDoKKwog
MjAyMS0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCBzaG91bGQgbm90IGxvYWQgaW5k
ZXhpbmdUeXBlIHVubmVjZXNzYXJpbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YWRkNmNiNDMyMjkyN2YyMjE1YTYzMmQzODkzYmRjOWMzODI1ZmE3YS4uMzIzZDhhNDBlMWY2ZTIz
ZmNlMjdlZDdjMDhkYjUzMjQ3M2IyNmE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQ2NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUUxNENBN0RD
NTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk2MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTNC
NEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8q
IFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNp
dFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBD
MzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAw
NTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsMTEgKzI4NjYsMTEgQEAKIAkJMEY5MzMyOTQxNENB
N0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRCeVN0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJ
ZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlk
U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOUExNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
MzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1
dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTgx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFy
aWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVZhcmlhbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8q
IFZpc2l0UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
aXNpdFJhY2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFBMDFE
Rjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODY5NSwxMCArODY5NSwxMCBAQAogCQkJCTBGRDNF
NDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGMTVD
RDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwICovLAogCQkJCTBGMTVDRDIx
MUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzQjRBNzE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
VmFyaWFudC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFy
aWFudC5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8s
CiAJCQkJMEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuY3BwICov
LAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8s
CkBAIC0xMDUwNiw4ICsxMDUwNiw4IEBACiAJCQkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8q
IFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcy
RDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFG
RkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTNCNEFB
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFBy
b3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5k
ZXggYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uNzA3N2VmOWFlMzEx
NzZmNjM4NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dApAQCAtMjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiBieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2Uu
Y3BwCiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAotYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAK
K2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3Bw
CiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCmluZGV4IGZhOGI2YjIyZTNhNGUyZGM5NTBjN2JiMjQ2OTdlNjk4MjgwYzM1YjYuLjZjYTg3
Zjk1MWYyZjg2N2I1YzdmMDJjZWRkODNhYmUxY2FlOTYzZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTk5LDYgKzk5LDE5IEBAIFJlZjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIENhY2hlCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4
ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNh
c2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghcHJvdG90eXBlQWNjZXNzQ2hhaW4pOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgpAQCAtMjcyLDYgKzI4NSwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6Omd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrU2tpcHBpbmdDb25zdGFudElkZW50aWZpZXJDaGVjaygpIGNvbnN0
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjYsNiArMzUyLDE5IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJZGVudGlmaWVyTmFtZU1hdGNoKCkgY29uc3QKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM3OCw2ICs0MTcsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjaygpIGNvbnN0CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xh
bXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyNSwxMSArNDc3LDI0IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6bmVlZHNTY3JhdGNoRlBSKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxv
YWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtNTE1LDYgKzU4MCwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmZvckVh
Y2hEZXBlbmRlbnRDZWxsKFZNJiB2bSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdl
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAg
LTU2OSw2ICs2NDcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoVk0mIHZtLCBWZWN0
b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrSWZEb2VzQ2FsbHMpIGNvbnMKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGRvZXNDYWxscyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFJlcGxhY2U6CkBAIC02NTAsNiArNzQxLDE5IEBAIGJvb2wgQWNjZXNzQ2Fz
ZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBvdGhlci50eXBlKCkgPT0gdHlwZSgp
OwogCiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7CkBAIC05NjEsNiArMTA2NSw4IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQ
Uik7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xMDYwLDYgKzExNjYsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTEx
NDUsNiArMTI1Myw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtMTE5OSwxNSArMTMwOSwxNCBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBpc091dE9mQm91bmRzOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNF
bXB0eTsKLQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJ
bmZvLnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNl
UmVncygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2Fy
cmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhz
Y3JhdGNoR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xMjI3LDE2ICsxMzM2
LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIp
KTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0
Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gz
R1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1w
dHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hH
UFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRj
aDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKQEAgLTEyNjIsMjEgKzEzNzEsMjEg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgICAgIHByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgICAg
ICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIHN0YXRlLnNjcmF0Y2hGUFIp
OwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRj
aEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElm
TmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAgICAgICAgICBqaXQuYm94RG91YmxlKHN0
YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Vp
Z2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkg
PSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxz
ZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFs
dWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgaXNFbXB0
eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBmYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUikpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkp
OwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzk1LDI3MyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwog
Ci0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHko
KSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworICAgICAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVu
ZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
OiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBp
cyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ug
b3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnBy
b3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNoZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMg
YWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUp
KSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
YWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9OworCisg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmIChtX3R5
cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisgICAg
ICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vsc2UK
KyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKworICAgICAgICAgICAgc3RvcmVSZXN1
bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAg
ICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBzdG9y
ZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7Cisg
ICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBq
aXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3Rh
dGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBlbWl0
dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAo
bV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgewogICAgICAgICAgICAgaXNPdXRP
ZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsIEFycmF5UHJv
ZmlsZTo6b2Zmc2V0T2ZNYXlTdG9yZVRvSG9sZSgpKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMkdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgICAgICBqaXQuYWRkMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LnN1YjMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICBmYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0
b3JlOChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3Rv
cmVUb0hvbGUoKSkpOworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFs
bG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsK
KyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKICAgICAgICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUp
OwogICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoZmFp
bEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9y
ZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNl
IG9yIHRoZSBwcm9wZXJ0eS4KKworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9UeXBl
ZEFycmF5VHlwZShtX3R5cGUpOworCisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRl
LnUucHJvcGVydHlHUFI7CisKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVk
QXJyYXlUeXBlKHR5cGUpKSkpOworCisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVl
UmVncykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICBhdXRvIGRvdWJsZUNhc2UgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMih2YWx1ZVJlZ3MpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgYXV0
byByZWFkeSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBkb3VibGVDYXNlLmxpbmsoJmppdCk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAg
ICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91Ymxl
KHNjcmF0Y2hHUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworI2Vsc2UKKyAgICAgICAgICAgIHN0YXRl
LmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCB2
YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5k
aWYKKyAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisgICAgICAgIH0KKworICAgICAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAvLyBPdXRPZkJvdW5k
cyBiaXQgb2YgQXJyYXlQcm9maWxlIHdpbGwgYmUgc2V0IGluIHRoZSBvcGVyYXRpb24gZnVuY3Rp
b24uCisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKSk7CisKKyAg
ICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7Cisg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVH
UFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
Lm1fYXJyYXlQcm9maWxlR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkKKyAgICAgICAgICAgIHNjcmF0Y2gzR1BSID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoCisgICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25k
aXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKKworICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsK
KyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFKU0M6
OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgYXV0byBpbkJvdW5kcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgc2NyYXRjaDNHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRv
b0JpZyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuLCBzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGpp
dC54b3IzMihzY3JhdGNoM0dQUiwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8g
Y2xhbXBlZCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgdG9vQmlnLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhm
ZiksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBjbGFtcGVkLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgaW5Cb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU4KHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU4KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMTYodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNUd28pKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Zv
dXIpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChpc091dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGlzRW1wdHkpOworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBS
UmVnKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3Rh
dGUuc2NyYXRjaEZQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlRmxvYXQoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2Ny
YXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTMyMiw2ICsxNjg4LDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwog
ICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAg
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAg
IGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAg
ICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKQEAgLTE4OTQsOCAr
MjI2MiwxMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9y
KHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5m
by5iYXNlUmVncygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAg
ICAgaWYgKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHVi
SW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BS
KTsKIAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwpAQCAtMjA1
OCw2ICsyNDMwLDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CiAgICAg
ICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYg
KHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlKCktPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlBy
b3BlcnR5RGVsZXRpb24pOwpAQCAtMjE4Myw2ICsyNTU3LDE5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAg
ICAgY2FzZSBDaGVja1ByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0
aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBpcyBwYXJ0IG9mIHRoZQogICAgICAgICAvLyBhbGdv
cml0aG0uIFdlIGNhbiBiZSBzdXJlIHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRp
cmVjdGx5IGZvciB0aGVzZSBzaW5jZSB0aGV5CiAgICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBi
eSBzdHJ1Y3R1cmUgY2hlY2tzLgpAQCAtMjE5NiwyMiArMjU4MywzMSBAQCBUeXBlZEFycmF5VHlw
ZSBBY2Nlc3NDYXNlOjp0b1R5cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsK
ICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
OExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKICAgICAgICAgcmV0
dXJuIFR5cGVJbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWlu
dDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgogICAgICAgICByZXR1cm4gVHlw
ZVVpbnQ4Q2xhbXBlZDsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUlu
dDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDMyOwogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6
CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI4NCw2ICsyNjgwLDE5IEBAIGJvb2wgQWNj
ZXNzQ2FzZTo6Y2FuQmVTaGFyZWQoY29uc3QgQWNjZXNzQ2FzZSYgbGhzLCBjb25zdCBBY2Nlc3ND
YXNlJiByaHMpCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6CiAgICAg
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmgKaW5kZXggNDE5Yzk5YzkwZjQzOTAxODAxZDRhOTYyMTEwNTA4OTliYWRmZDliZS4uNTYz
YTE1NTJhZTQyMTY0NDA0NmQwYWE0MWQyM2I2YWRkNWRiNjU1OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCkBAIC0xMjgsNyArMTI4LDIwIEBAIGNsYXNz
IEFjY2Vzc0Nhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzQ2FzZT4gewog
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMkxvYWQsCiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQs
Ci0gICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkCisgICAgICAgIEluZGV4ZWRTdHJpbmdMb2FkLAor
ICAgICAgICBJbmRleGVkSW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZERvdWJsZVN0b3JlLAor
ICAgICAgICBJbmRleGVkQ29udGlndW91c1N0b3JlLAorICAgICAgICBJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlLAorICAgICAgICBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZSwKKyAg
ICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlLAor
ICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0U3RvcmUsCiAgICAgfTsKIAogICAgIGVudW0gU3RhdGUgOiB1aW50OF90
IHsKQEAgLTM1MywxMiArMzY2LDEzIEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAg
ICBzdHJ1Y3QgS2V5IHsKICAgICAgICAgICAgIEtleSgpID0gZGVmYXVsdDsKIAotICAgICAgICAg
ICAgS2V5KEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBleHRyYUdQUiwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQb2x5bW9ycGhp
Y0FjY2Vzc0pJVFN0dWJSb3V0aW5lKiB3cmFwcGVkKQorICAgICAgICAgICAgS2V5KEdQUlJlZyBi
YXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBleHRyYUdQUiwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBQ
b2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0aW5lKiB3cmFwcGVkKQogICAgICAgICAgICAgICAg
IDogbV93cmFwcGVkKHdyYXBwZWQpCiAgICAgICAgICAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQ
UikKICAgICAgICAgICAgICAgICAsIG1fdmFsdWVHUFIodmFsdWVHUFIpCiAgICAgICAgICAgICAg
ICAgLCBtX2V4dHJhR1BSKGV4dHJhR1BSKQogICAgICAgICAgICAgICAgICwgbV9zdHViSW5mb0dQ
UihzdHViSW5mb0dQUikKKyAgICAgICAgICAgICAgICAsIG1fYXJyYXlQcm9maWxlR1BSKGFycmF5
UHJvZmlsZUdQUikKICAgICAgICAgICAgICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0
ZXJzKQogICAgICAgICAgICAgeyB9CiAKQEAgLTM3NSw2ICszODksNyBAQCBjbGFzcyBTaGFyZWRK
SVRTdHViU2V0IHsKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3ZhbHVlR1BSID09IGIubV92
YWx1ZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fZXh0cmFHUFIgPT0gYi5tX2V4dHJh
R1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9zdHViSW5mb0dQUiA9PSBiLm1fc3R1Yklu
Zm9HUFIKKyAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2FycmF5UHJvZmlsZUdQUiA9PSBiLm1f
YXJyYXlQcm9maWxlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV91c2VkUmVnaXN0ZXJz
ID09IGIubV91c2VkUmVnaXN0ZXJzOwogICAgICAgICAgICAgfQogCkBAIC0zODMsNiArMzk4LDcg
QEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICBHUFJSZWcgbV92YWx1ZUdQ
UjsKICAgICAgICAgICAgIEdQUlJlZyBtX2V4dHJhR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1f
c3R1YkluZm9HUFI7CisgICAgICAgICAgICBHUFJSZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAg
ICAgICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIH07CiAKQEAgLTQx
Niw2ICs0MzIsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgICAgICAg
ICAgJiYgYS5tX3ZhbHVlR1BSID09IGIubV92YWx1ZUdQUgogICAgICAgICAgICAgICAgICAgICAm
JiBhLm1fZXh0cmFHUFIgPT0gYi5tX2V4dHJhR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEu
bV9zdHViSW5mb0dQUiA9PSBiLm1fc3R1YkluZm9HUFIKKyAgICAgICAgICAgICAgICAgICAgJiYg
YS5tX2FycmF5UHJvZmlsZUdQUiA9PSBiLm1fYXJyYXlQcm9maWxlR1BSCiAgICAgICAgICAgICAg
ICAgICAgICYmIGEubV91c2VkUmVnaXN0ZXJzID09IGIubV91c2VkUmVnaXN0ZXJzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgb3JkZXJpbmcgb2YgY2FzZXMgZG9lcyBub3Qg
bWF0dGVyIGZvciBzaGFyaW5nIGNhcGFiaWxpdGllcy4KICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgY2FuIHBvdGVudGlhbGx5IGluY3JlYXNlIHN1Y2Nlc3MgcmF0ZSBieSBtYWtpbmcgdGhpcyBj
b21wYXJpc29uIC8gaGFzaGluZyBub24gb3JkZXJpbmcgc2Vuc2l0aXZlLgpAQCAtNDQ1LDYgKzQ2
Miw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICBHUFJSZWcgbV92YWx1ZUdQ
UjsKICAgICAgICAgR1BSUmVnIG1fZXh0cmFHUFI7CiAgICAgICAgIEdQUlJlZyBtX3N0dWJJbmZv
R1BSOworICAgICAgICBHUFJSZWcgbV9hcnJheVByb2ZpbGVHUFI7CiAgICAgICAgIFJlZ2lzdGVy
U2V0IG1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8UmVmUHRyPEFj
Y2Vzc0Nhc2U+PiYgbV9jYXNlczsKICAgICAgICAgY29uc3QgRml4ZWRWZWN0b3I8U3RydWN0dXJl
SUQ+JiBtX3dlYWtTdHJ1Y3R1cmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FycmF5UHJvZmlsZS5oCmluZGV4IDZkYzdiMGU1NDQ3ZmUwNjBkYmNiZDI0ZDk5MDk3NTY1Nzlm
YzY1NzQuLjkxZGE4ZjNlZmY5MmZjM2E4OTU3MGQ3NWE0YjkxM2JkMjYzMmNjNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKQEAgLTIwOCw2ICsy
MDgsOSBAQCBjbGFzcyBBcnJheVByb2ZpbGUgewogICAgIEFycmF5TW9kZXMqIGFkZHJlc3NPZkFy
cmF5TW9kZXMoKSB7IHJldHVybiAmbV9vYnNlcnZlZEFycmF5TW9kZXM7IH0KICAgICBib29sKiBh
ZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpIHsgcmV0dXJuICZtX21heVN0b3JlVG9Ib2xlOyB9CiAK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlQcm9maWxlLCBtX21heVN0b3JlVG9Ib2xlKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5UHJvZmlsZSwgbV9sYXN0U2VlblN0cnVjdHVyZUlEKTsgfQorCiAg
ICAgdm9pZCBzZXRPdXRPZkJvdW5kcygpIHsgbV9vdXRPZkJvdW5kcyA9IHRydWU7IH0KICAgICBi
b29sKiBhZGRyZXNzT2ZPdXRPZkJvdW5kcygpIHsgcmV0dXJuICZtX291dE9mQm91bmRzOyB9CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5jcHAKaW5kZXggNzY3MWQ4N2IxZWE3NDlkYzM0NTZmNzc2NWFjMDZj
NGE4YmNmYjJiMS4uYzAyNWE3YmY2NTE5NGJkYTRlODIxNTFkOWNiM2YyOTY3OGRhOTI3NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vz
c0Nhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcApAQCAtMTQxLDYgKzE0MSw4IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBj
b25zCiAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJh
eVByb2ZpbGVHUFIpOwogICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogCiAgICAgR1BS
UmVnIHBhcmFtQmFzZUdQUiA9IEludmFsaWRHUFJSZWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3ZmUz
Yjg0OTE3YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5MjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwogY2xh
c3MgR2V0QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1czsK
K2NsYXNzIFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBJ
Q1N0YXR1cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07CiAg
ICAgR2V0QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVzKiBp
blN0YXR1cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBudWxs
cHRyIH07CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBEZWxl
dGVCeVN0YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAppbmRleCA0ODQxMDEzOWRj
MmY4YzBkNWM4MGEyZmY5MDVjM2FhNmExMzVkZmIyLi5jMWViMmQ2OWQyNzU0ZTA1MWE4MjU5ZjYz
NzdlNjQ3MTRlZWFlZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcApAQCAtMjE2LDggKzIxNiwxMiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRp
YyBHUFJSZWcgZ2V0U2NyYXRjaFJlZ2lzdGVyKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlVGFnR1BSKTsKICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby52YWx1ZVRhZ0dQUik7CiAjZW5kaWYKKyAgICBpZiAoc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVn
cygpKTsKICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQog
ICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBpZiAo
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgIEdQUlJlZyBzY3Jh
dGNoID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgIGlmIChhbGxvY2F0b3Iu
ZGlkUmV1c2VSZWdpc3RlcnMoKSkKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAppbmRleCA4MTA0YTJmMzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40MGQ2YTFm
OWRhNTgyNTIwNTU0YWFjMzRlYzFhNDRlNDI5YWY4NjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTQ5NCw2ICs0
OTQsOCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVy
YXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogI2VuZGlmCiAgICAgaWYgKHN0dWJJbmZv
Lm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSKTsKIAogICAgIHN0YXRlLnNjcmF0Y2hHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTgxMCw2ICs4MTIsNyBAQCBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKU0xvYwogICAgICAgICAgICAgc3R1YkluZm8udmFsdWVHUFIsCiAgICAgICAgICAgICBzdHVi
SW5mby5yZWdzLnRoaXNHUFIsCiAgICAgICAgICAgICBzdHViSW5mby5tX3N0dWJJbmZvR1BSLAor
ICAgICAgICAgICAgc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsCiAgICAgICAgICAgICBzdHVi
SW5mby51c2VkUmVnaXN0ZXJzLAogICAgICAgICAgICAga2V5cywKICAgICAgICAgICAgIHdlYWtT
dHJ1Y3R1cmVzLApAQCAtODQ2LDcgKzg0OSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9s
eW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9jCiAK
ICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICBpZiAoY2FuQmVTaGFy
ZWQpCi0gICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1YlNl
dDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHViSW5m
by5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLnVzZWRSZWdp
c3RlcnMsIHN0dWIuZ2V0KCkpKTsKKyAgICAgICAgICAgIHZtLm1fc2hhcmVkSklUU3R1YnMtPmFk
ZChTaGFyZWRKSVRTdHViU2V0OjpIYXNoOjpLZXkoc3R1YkluZm8uYmFzZUdQUiwgc3R1YkluZm8u
dmFsdWVHUFIsIHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwg
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsIHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMsIHN0dWIu
Z2V0KCkpKTsKICAgICB9CiAKICAgICByZXR1cm4gZmluaXNoQ29kZUdlbmVyYXRpb24oV1RGTW92
ZShzdHViKSk7CkBAIC0xMDIyLDYgKzEwMjUsNDUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKICAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOgogICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRTdHJp
bmdMb2FkIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRJ
bnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRJbnQzMlN0b3JlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkRG91YmxlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkQ29udGlndW91c1N0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgICAgIG91dC5w
cmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3Jl
OgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50MTZT
dG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5
VWludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4
ZWRUeXBlZEFycmF5VWludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgICAgIG91dC5wcmlu
dCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CisgICAgICAg
IG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWZhYjlkMzljN2E0ZWE2ZTYxY2Y1NjQ4YWVmYWM5MGMx
ZjdjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0
YXR1cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgotI2luY2x1ZGUgIkdldHRlclNl
dHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCi0jaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLXsKLSAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNW
YXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OnNo
cmlua1RvRml0KCkKLXsKLSAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Ci19Ci0KLVB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwotICAgIAotICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4Lm9mZnNldCgpKTsKLQotICAgIC8vIFdlIGFyZSBub3QgeWV0IHVzaW5nIGBjb21wdXRl
RnJvbUxMSW50YCBpbiBhbnkgcGxhY2UgZm9yIGBwdXRfcHJpdmF0ZV9uYW1lYC4KLSAgICAvLyBX
ZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNo
YW5nZXMsIHNpbmNlIHdlIGhhdmUKLSAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVy
YXRpb24gb24gTExJbnQuCi0gICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BQdXRQcml2YXRl
TmFtZT4oKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spOwotCi0gICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVj
dHVyZUlEOwotICAgIGlmICghc3RydWN0dXJlSUQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0u
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKLQotICAgIFN0cnVjdHVy
ZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKLSAgICBpZiAo
IW5ld1N0cnVjdHVyZUlEKSB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0u
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAKLSAgICBB
U1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKCEoYnl0ZWNvZGUu
bV9mbGFncy5pc0RpcmVjdCgpKSkgewotICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAg
ICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAot
ICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0
dXJlLCB1aWQpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICBzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotfQotCi0jaWYgRU5BQkxFKEpJ
VCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBVTlVTRURfUEFS
QU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAg
IFVOVVNFRF9QQVJBTSh1aWQpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChkaWRFeGl0
KQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNv
ZGVJbmRleCkpLnN0dWJJbmZvOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQs
IGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gY29t
cHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9QQVJB
TShtYXApOwotICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKLSAgICBVTlVTRURfUEFSQU0oY2Fs
bEV4aXRTaXRlRGF0YSk7Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENv
ZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgcmV0dXJu
IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHVi
SW5mbywgdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShi
YXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwotfQotCi1QdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICBjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIFN0dWJJbmZv
U3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRCbG9j
ay0+dm0oKSwgc3R1YkluZm8pOwotICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzdW1tYXJ5KTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0
dWJJbmZvLT5jYWNoZVR5cGUoKSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVkIGZv
ciBzb21lIHJlYXNvbi4KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZTogewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+bV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAg
IH0KLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwotICAgICAgICAKLSAgICAgICAg
UHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwot
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAg
ICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6UmVwbGFjZTogewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7
Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAg
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gYWNj
ZXNzLmNvbmRpdGlvblNldCgpOwotICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0
cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2
YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQs
IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogewotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdl
dFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRT
dGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxM
aW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0
KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgfSB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgotICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci19Ci0KLVB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElD
U3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFj
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwotICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2Rl
SW5kZXgpOwotICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJhc2Vs
aW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgZm9yIChJQ1N0YXR1c0NvbnRleHQqIGNv
bnRleHQgOiBjb250ZXh0U3RhY2spIHsKLSAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29udGV4
dC0+Z2V0KGNvZGVPcmlnaW4pOwotICAgICAgICAKLSAgICAgICAgYXV0byBibGVzcyA9IFsmXSAo
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeUlkU3RhdHVzIHsKLSAgICAgICAg
ICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7Ci0gICAgICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCi0gICAgICAgICAg
ICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1aWQs
IGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAg
ICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGJhc2VsaW5lUmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRp
ZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnNsb3dWZXJzaW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
OwotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgewotICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAg
ICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVz
LnN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1
cykKLSAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBi
eXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOwotfQotCi1QdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkK
LXsKLSAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICBpZiAoc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoKTsKLSAgICAKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1w
bGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgewotICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYg
c3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQg
b2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2Rl
Ci0gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZh
dGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAotICAgICAgICAgICAgLy8g
c2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIGlmIChwcml2YXRlRmll
bGRQdXRLaW5kLmlzRGVmaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFjZVNl
dCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsK
LSAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQo
KSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3JlYXRl
LCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KLSAgICAgICAgICAg
ICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVk
IG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCi0gICAgICAgICAgICAgICAgLy8gZ29pbmcgb24u
IEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0
aGUgY29uY3VycmVudAotICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYg
d2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3kuCi0g
ICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNs
b3cgcGF0aC4KLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFu
dCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBv
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2FuIGhhdmUg
YSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAotICAgICAg
ICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNlIGl0
IG1lYW5zIHdlIGFyZQotICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5zdGFs
bGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQotICAgICAgICAvLyBzbG93IHBhdGgg
dG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KLSAgICAgICAgaWYg
KHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRo
YXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlz
IHJlYWxseQotICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNr
cy4KLSAgICAKLSAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rp
b25hcmllcy4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBJ
ZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9i
amVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQotICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGJl
IGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCi0gICAgICAgIGlmICghc3RydWN0dXJlLT50
eXBlSW5mbygpLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBBU1NF
UlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7Ci0gICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHko
Ci0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwotICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICB9Ci0gICAgCi0gICAg
ICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0
aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KLSAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
LSAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwotICAgIAotICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAot
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAg
c3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwotICAgICAgICBp
ZiAoIWRpZEFwcGVuZCkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xv
d1BhdGgpOwotICAgIH0KLSAgICAKLSAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgUHV0QnlJZFN0YXR1czo6bWFrZXNDYWxscygp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgCi0gICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxscygpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xvd1Bh
dGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkU3RhdHVz
OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZp
c2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShWTSYg
dm0pCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsK
LSAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6
bWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYgb3RoZXIpCi17Ci0gICAgaWYgKG90aGVyLm1fc3Rh
dGUgPT0gTm9JbmZvcm1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gbWVy
Z2VTbG93ID0gWyZdICgpIHsKLSAgICAgICAgKnRoaXMgPSBQdXRCeUlkU3RhdHVzKChtYWtlc0Nh
bGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRo
KTsKLSAgICB9OwotICAgIAotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZv
cm1hdGlvbjoKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2ltcGxl
KQotICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICAKLSAgICAgICAgZm9y
IChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Ci0gICAg
ICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQotICAgICAgICAgICAgICAgIHJldHVy
biBtZXJnZVNsb3coKTsKLSAgICAgICAgfQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICBjYXNlIE1h
a2VzQ2FsbHM6Ci0gICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICB9Ci0gICAgCi0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0gU2lt
cGxlKQotICAgICAgICByZXR1cm47Ci0gICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3Zhcmlh
bnRzLCBzZXQpOwotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KQotICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOwot
ICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3Jt
YXRpb247Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAotewotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoK
LSAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbikiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgb3V0LnByaW50KCIoIiwgbGlzdER1
bXAobV92YXJpYW50cyksICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2Fz
ZSBUYWtlc1Nsb3dQYXRoOgotICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICBvdXQucHJpbnQo
IihNYWtlc0NhbGxzKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODc4ZTI1MmRiNjlhYzU3MTNkYzhlOGY4YjY0NDAwMGNhZTYz
MGIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgi
Ci0jaW5jbHVkZSAiRXhpdEZsYWcuaCIKLSNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgotI2luY2x1
ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgot
I2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
Q29kZUJsb2NrOwotY2xhc3MgVk07Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIFN0cnVj
dHVyZTsKLWNsYXNzIFN0cnVjdHVyZUNoYWluOwotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87Ci0K
LXR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmln
aW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOwotCi1jbGFzcyBQdXRCeUlkU3RhdHVzIGZp
bmFsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVtIFN0
YXRlIHsKLSAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9u
LgotICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNp
bXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCi0gICAgICAgIFNpbXBsZSwKLSAgICAgICAgLy8gSXQn
cyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgVGFrZXNTbG93UGF0aCwK
LSAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4KLSAg
ICAgICAgTWFrZXNDYWxscwotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cygpCi0gICAg
ICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhw
bGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0
YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKLSAgICB9Ci0g
ICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgewotICAgICAgICBjYXNlIFN0dWJJbmZv
U3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0
aW9uOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
U2ltcGxlOgotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgotICAgICAgICAg
ICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKLSAgICAg
ICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAot
ICAgIFB1dEJ5SWRTdGF0dXMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi0gICAgICAg
IDogbV9zdGF0ZShTaW1wbGUpCi0gICAgewotICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJp
YW50KTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSAgICBzdGF0
aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0
dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZp
ZWxkUHV0S2luZCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0
dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNv
bXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJh
c2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7Ci0jZW5kaWYKLSAgICAKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGU7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIGlzU2ltcGxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KLSAgICBib29sIHRha2VzU2xvd1BhdGgo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBN
YWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgUHV0QnlJZFN0
YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OwotICAgIAotICAgIHNpemVfdCBudW1WYXJpYW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFB1
dEJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9
Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50c1tpbmRleF07IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwot
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5
SWRTdGF0dXMmKTsKLSAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
LSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1
YkluZm8oCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKLSAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0jZW5kaWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwotICAgIAotICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlk
VmFyaWFudCYpOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAKLSAgICBTdGF0ZSBtX3N0
YXRlOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTRkNjQ3
ODJhOTY0MzkzMDlhZTlhMWZhMDQ4YTM4NzI1NTIxZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0KLSNpbmNsdWRlICJDYWxsTGlu
a1N0YXR1cy5oIgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1QdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90
aGVyKQotICAgIDogUHV0QnlJZFZhcmlhbnQoKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0K
LVB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiBvdGhlcikKLXsKLSAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7Ci0gICAgbV9vbGRT
dHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKLSAgICBtX25ld1N0cnVjdHVyZSA9IG90
aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRp
b25TZXQ7Ci0gICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBpZiAob3RoZXIubV9j
YWxsTGlua1N0YXR1cykKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7Ci0gICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5SWRWYXJp
YW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKLSAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJl
ID0gbmV3U3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKLXsKLSAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKLSAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVN0cnVjdHVyZSogUHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChzdHJ1
Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwot
ICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJ
Zk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9
IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykg
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAg
ICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgbV9raW5k
ID0gUmVwbGFjZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwotfQotCi1ib29s
IFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICBjYXNlIFNldHRlcjoKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBjYXNlIFNldHRlcjoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6
OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBpZiAo
bV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
Y2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAg
IGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIu
bV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKLSAgICAgICAgICAgIGlmIChuZXdWYXJpYW50
LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgewotICAgICAgICAg
ICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAg
c3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOgotICAgICAgICAg
ICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIGlmICht
X29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25ld1N0cnVjdHVy
ZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1l
cmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25T
ZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1l
cmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjogewotICAgICAgICBpZiAob3Ro
ZXIubV9raW5kICE9IFNldHRlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0dXMp
IHsKLSAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxsTGlu
a1N0YXR1cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsK
LSAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1l
cmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25k
aXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgp
IHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb25kaXRpb25T
ZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxsTGlu
a1N0YXR1cykKLSAgICAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKTsKLSAgICAgICAgCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90
aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0gICAg
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBs
YWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKQotewotICAgIEFTU0VSVChtX2tpbmQg
PT0gVHJhbnNpdGlvbik7Ci0gICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJlcGxhY2UpOwot
ICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKLSAgICBBU1NFUlQoIXJl
cGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKLSAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxvY2F0
ZXNTdG9yYWdlKCkpOwotICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSk7Ci0gICAgCi0gICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVuIHdl
IGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCi0gICAg
Ly8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2FzIGFs
cmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAotICAgIC8vIHdvcmsgaWYgd2UgbmVl
ZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGggaXMgcG9seW1v
cnBoaWMuCi0gICAgCi0gICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkVmFyaWFudDo6
bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX29sZFN0cnVjdHVyZS5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1fbmV3
U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRC
eUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUg
dm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQ
dXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGlmICghbV9vbGRTdHJ1Y3R1
cmUuaXNTdGlsbEFsaXZlKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX25l
d1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2bSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAhbV9j
YWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0KLXZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNl
IE5vdFNldDoKLSAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAg
IjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIHRv
ICIsCi0gICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29u
dGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250
ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICBvdXQucHJpbnQoCi0gICAg
ICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwg
WyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIp
OwotICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwotICAgICAgICBv
dXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgb3V0LnBy
aW50KCI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGE3NWE3M2EyZjhkNGI1ZTVmMGExZGU0MDhhNWZiYmQxY2I3YWIyNTku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZVNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtTdGF0dXM7Ci0KLWNs
YXNzIFB1dEJ5SWRWYXJpYW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBlbnVtIEtpbmQgewotICAgICAgICBOb3RTZXQsCi0gICAgICAgIFJlcGxhY2UsCi0g
ICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFNldHRlcgotICAgIH07Ci0gICAgCi0gICAgUHV0
QnlJZFZhcmlhbnQoKQotICAgICAgICA6IG1fa2luZChOb3RTZXQpCi0gICAgICAgICwgbV9vZmZz
ZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
KTsKLSAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
Ci0KLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQm
LCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5z
aXRpb24oCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNl
dHRlcigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPik7Ci0gICAgCi0gICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBO
b3RTZXQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9
Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwot
ICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0
dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgb2xk
U3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8
fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJu
IG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OwotICAg
IAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVy
ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nh
cnkoKTsKLQotICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgcmVh
bGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0g
ICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qg
c3VwcG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBk
aWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIEludHJpbnNp
YyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQotCi0gICAgLy8gVGhp
cyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIGJvb2wgaXNQcm9wZXJ0eVVu
c2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVy
biBtX29mZnNldDsKLSAgICB9Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3Rh
dHVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAg
ICAgICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBh
dHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwotICAgIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwotICAg
IGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OwotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3Ry
dWN0dXJlU2V0KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIGF0dGVtcHRUb01lcmdl
VHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKTsKLSAg
ICAKLSAgICBLaW5kIG1fa2luZDsKLSAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAgICBT
dHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVy
ZSB7IG51bGxwdHIgfTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlv
blNldDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0
dXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NDY3OWM0YjAyNDc2ODY2MTgz
ZWJlNzg3NTZmYjQ4ODU4MGU1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCkBAIC0wLDAgKzEsNTQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCisKKyNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0U3Rh
dHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIklD
U3RhdHVzVXRpbHMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworUHV0QnlTdGF0dXM6
OlB1dEJ5U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICBj
YXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5
OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8udG9va1Nsb3dQYXRo
ID8gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIDogTGlrZWx5VGFrZXNTbG93UGF0aDsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXND
YWxsczoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2VydmVk
U2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogTWFrZXNDYWxsczsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIFB1dEJ5U3Rh
dHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICBy
ZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCit2
b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV92YXJpYW50cy5zaHJpbmtU
b0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludChD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sK
KyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOworICAgIAorICAgIGF1dG8gaW5zdHJ1
Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9m
ZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
OgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CisgICAg
ICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJldHJpZXZpbmcgTExJbnQgaW5mb3JtYXRpb24g
Zm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAgICAgICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0
IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBo
YXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBvbiBMTElu
dC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGRlZmF1
bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJv
ZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllciA9ICYocHJvZmls
ZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwoKTsKKworICAgIFN0cnVjdHVyZUlEIHN0
cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIXN0cnVjdHVy
ZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
c3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0
YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
KyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gUHV0
QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICB9CisK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Cisg
ICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0sIHByb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhO
b0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6dHJh
bnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgIAorICAgIFVOVVNFRF9QQVJB
TShwcm9maWxlZEJsb2NrKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgaWYgKGRpZEV4aXQpCisgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvOwor
ICAgIFB1dEJ5U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9j
a2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZSAvLyBFTkFC
TEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShtYXApOworICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9CisKK1B1dEJ5
U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgcmV0dXJuIGNvbXB1
dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywK
KyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9j
aywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBT
dHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2Zp
bGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKKyAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5
KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKHN1bW1hcnksICpzdHViSW5mbyk7CisgICAg
CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKKyAgICBjYXNlIENhY2hlVHlw
ZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2Fj
aGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAKKyAgICBj
YXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKKyAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHVpZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICBz
dHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9y
cGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAgICBQ
dXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsK
KyAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAg
ICAgICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51
aWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFy
aWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246
IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBhY2Nlc3MubmV3U3Ry
dWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBhY2Nl
c3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3Ry
dWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAg
ICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3MuaWRl
bnRpZmllcigpLCBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZh
cmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpTZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlkKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0
YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNo
b3VsZFNraXA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1Bh
dGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9
CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nl
c3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2Nr
LCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50
ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBj
b21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgp
LCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpLCAqc3R1YkluZm8pOworICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVN
YXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKK3sKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKKyAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJs
b2NrLCBieXRlY29kZUluZGV4KTsKKyAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVF
eGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNTdGF0
dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVzIHN0
YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
Ymxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVzIHsK
KyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7CisgICAg
ICAgICAgICAgICAgUHV0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAorICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRl
eCwgZGlkRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAg
ICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQuc2xvd1ZlcnNpb24oKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAgICAg
ICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVz
LnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChyZXN1bHQuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCisg
ICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNv
ZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1
dEJ5U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJvb2wg
aXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sKKyAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAocGFy
c2VJbmRleCgqdWlkKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xv
d1BhdGgpOworCisgICAgaWYgKHNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cygpOworICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBQdXRC
eVN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQorICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgIGlmICghc3RydWN0dXJl
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZzZXQg
Zm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKKyAgICAg
ICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBmaWVs
ZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCisgICAgICAgICAgICAvLyBzbG93IHBh
dGggdG8gdGhyb3cgZXhjZXB0aW9uLgorICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1dEtp
bmQuaXNEZWZpbmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5
VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
KFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1Bh
dGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0
ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUs
IGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAgICAg
ICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQg
b3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBvbi4g
QWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRo
ZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3
ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KKyAg
ICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xv
dyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Ns
b3dQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlh
bnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwgc3RydWN0dXJlLCBvZmZzZXQp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBoYXZlIGEg
Y2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKKyAgICAgICAg
Ly8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBt
ZWFucyB3ZSBhcmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxl
ZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8gc2xvdyBwYXRoIHRv
IHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisgICAgICAgIGlmIChw
cml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMgaXMg
dGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMg
aXMgcmVhbGx5CisgICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkgY2hl
Y2tzLgorICAgIAorICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24gZGlj
dGlvbmFyaWVzLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAg
ICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0
IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50
IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3RydWN0
dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAg
ICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOworICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29u
Y3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
dWlkKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgICAg
IH0KKyAgICAKKyAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5
IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgorICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlk
LCAwLCBvZmZzZXQpOworICAgICAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOworICAgIAorICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3Vs
dC5hcHBlbmRWYXJpYW50KFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihpZGVudGlmaWVyLCBzdHJ1
Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgIGlmICgh
ZGlkQXBwZW5kKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xv
d1BhdGgpOworICAgIH0KKyAgICAKKyAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorI2VuZGlmCisKK2Jvb2wgUHV0QnlTdGF0dXM6Om1ha2VzQ2FsbHMoKSBj
b25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoK
KyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xv
d1BhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAg
Y2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBTaW1wbGU6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2Fs
bHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6
OnNsb3dWZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAob2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5m
b1Nsb3dQYXRoKCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBP
YnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFrZXNTbG93UGF0aCk7Cisg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBMaWtlbHlU
YWtlc1Nsb3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQdXRCeVN0YXR1czo6c2lu
Z2xlSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmdsZUlkZW50aWZpZXJGb3JJ
Q1N0YXR1cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHV0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFy
aWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JFR0FU
RShQdXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5
U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0QnlW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAo
QWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lm
Q2hlYXAoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZt
KQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgeworICAg
ICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6bWVyZ2Uo
Y29uc3QgUHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5v
SW5mb3JtYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbWVyZ2VTbG93ID0gWyZd
ICgpIHsKKyAgICAgICAgaWYgKG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIHx8
IG90aGVyLm9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICAgICAg
KnRoaXMgPSBQdXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkg
PyBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFrZXNTbG93UGF0aCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2Fs
bHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IExpa2VseVRha2VzU2xv
d1BhdGgpOworICAgIH07CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5m
b3JtYXRpb246CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNpbXBs
ZSkKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAgICAg
ICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1lcmdlU2xvdygpOworICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgIGNh
c2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICBjYXNl
IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VTbG93
KCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgUHV0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAg
ICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0
YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZh
cmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxh
Y2VJZk5lY2Vzc2FyeSgpOworICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAg
bV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNl
IE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
bGlzdER1bXAobV92YXJpYW50cyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExp
a2VseVRha2VzU2xvd1BhdGg6CisgICAgICAgIG91dC5wcmludCgiTGlrZWx5VGFrZXNTbG93UGF0
aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6Cisg
ICAgICAgIG91dC5wcmludCgiT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiTWFrZXNDYWxscyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxs
czoKKyAgICAgICAgb3V0LnByaW50KCJPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYzQ2OGEyODZlYjVmYjcxZjkx
N2I4MDg0Y2NkY2EwZjRhMjI4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJFeGl0RmxhZy5oIgorI2lu
Y2x1ZGUgIklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgor
I2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVk07CitjbGFzcyBK
U0dsb2JhbE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0cnVjdHVyZUNoYWluOwor
Y2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFw
OworCitjbGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQg
c28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAg
ICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgorICAgICAg
ICBTaW1wbGUsCisgICAgICAgIC8vIEl0IHdpbGwgbGlrZWx5IHRha2UgdGhlIHNsb3cgcGF0aC4K
KyAgICAgICAgTGlrZWx5VGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0byB0
YWtlIHNsb3cgcGF0aC4gV2UgYWxzbyBvYnNlcnZlZCB0aGF0IHRoZSBzbG93IHBhdGggd2FzIHRh
a2VuIG9uIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICBPYnNlcnZlZFRha2VzU2xvd1BhdGgs
CisgICAgICAgIC8vIEl0IHdpbGwgbGlrZWx5IHRha2UgdGhlIHNsb3cgcGF0aCBhbmQgd2lsbCBt
YWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzLAorICAgICAgICAvLyBJdCBrbm93biB0byB0
YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4gV2UgYWxzbyBvYnNlcnZlZCB0aGF0IHRoZSBzbG93
IHBhdGggd2FzIHRha2VuIG9uIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICBPYnNlcnZlZFNs
b3dQYXRoQW5kTWFrZXNDYWxscywKKyAgICB9OworICAgIAorICAgIFB1dEJ5U3RhdHVzKCkKKyAg
ICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBQdXRCeVN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQorICAgIHsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICAgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBjYXNlIExpa2VseVRha2VzU2xv
d1BhdGg6CisgICAgICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICBjYXNl
IE1ha2VzQ2FsbHM6CisgICAgICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0dWJJbmZvU3Vt
bWFyeSwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAgewor
ICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAg
c3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmll
bGRQdXRLaW5kKTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXND
b250ZXh0U3RhY2smLCBDb2RlT3JpZ2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGlj
IFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdp
bik7CisjZW5kaWYKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBO
b0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgTGlrZWx5VGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAg
ICBQdXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OworICAgIGJvb2wgb2JzZXJ2ZWRTdHJ1
Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBPYnNlcnZl
ZFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxs
czsgfQorICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFy
aWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4mIHZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5VmFyaWFu
dCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQor
ICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIGF0KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xlSWRlbnRp
ZmllcigpIGNvbnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAg
IGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5U3Rh
dHVzJik7CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAg
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorI2lm
IEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3RhdGljIFB1dEJ5
U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CisgICAg
CisgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIHZvaWQg
c2hyaW5rVG9GaXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZlY3RvcjxQdXRC
eVZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjA3YzUzNWIzNzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCkBA
IC0wLDAgKzEsMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5o
IgorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJD
YWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmIG90
aGVyKQorICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sKKyAgICAqdGhp
cyA9IG90aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3BlcmF0b3I9KGNv
bnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIubV9raW5kOwor
ICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAgbV9uZXdTdHJ1
Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90aGVy
Lm1fY29uZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgaWYg
KG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtl
VW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgZWxz
ZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lkZW50aWZpZXIg
PSBvdGhlci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQdXRCeVZhcmlh
bnQgUHV0QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sK
KyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3Vs
dC5tX2tpbmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1
bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247
CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgIHJlc3VsdC5t
X25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQg
PSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAg
ICByZXN1bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0g
V1RGTW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0
dXJlKiBQdXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3Zv
aWQgUHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQorewor
ICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxhY2U7CisgICAg
bV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6Ondy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2Fz
ZSBUcmFuc2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFB1dEJ5
VmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQ
dXRCeVZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBraW5kKCkgPT0g
U2V0dGVyOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5t
X2lkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2lkZW50aWZp
ZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb3RTZXQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAgICAgQVNTRVJU
KG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQob3RoZXIubV9j
b25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRpb246
IHsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7CisgICAgICAg
ICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgq
dGhpcykpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFRy
YW5zaXRpb246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2Ug
UmVwbGFjZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7
CisgICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAoIW1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlv
blNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwor
ICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6
IHsKKyAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVz
ICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBt
ZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJn
ZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghbWVyZ2VkQ29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNl
Q29uZGl0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAKKyAg
ICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVz
LT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAgICAgICBtX29s
ZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VU
cmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKQoreworICAg
IEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxhY2UubV9raW5k
ID09IFJlcGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsK
KyAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBBU1NFUlQoIXJl
cGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlv
blNldCgpLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25s
eSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZp
ZWxkIHdoaWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90
aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAorICAgIC8v
IHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNl
IHBhdGggaXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1
Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
dXRCeVZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lU
X0FHR1JFR0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgor
dm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
bV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1fbmV3U3RydWN0
dXJlKQorICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisK
K3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNp
dG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImKTsKKworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBpZiAo
IW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1
cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExpbmtT
dGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRy
KTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8Iik7Cisg
ICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91
dC5wcmludCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmlu
dCgKKyAgICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCks
IGNvbnRleHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdT
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29u
ZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNl
dCk7CisgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwor
ICAgICAgICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgK
QEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rU3RhdHVzOwor
CitjbGFzcyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwK
KyAgICAgICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAgICAKKyAgICBQ
dXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgICAgICA6IG1f
a2luZChOb3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAgICAg
LCBtX25ld1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmllcihXVEZNb3Zl
KGlkZW50aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJpYW50KGNvbnN0
IFB1dEJ5VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5
VmFyaWFudCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENhY2hlYWJsZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAg
ICBzdGF0aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciwgY29u
c3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAK
KyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlmaWVyLCBjb25z
dCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAgICAKKyAgICBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJl
cGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVy
ZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQo
KSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRT
dHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJl
U2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQo
KSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAg
IAorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAgICAgIHJldHVy
biBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsK
KyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZp
eFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3cml0ZXNTdHJ1
Y3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKKyAg
ICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRl
cnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVt
cGxhdGVkIGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJu
IE5vSW50cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhl
bHBlcnMuCisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAg
ICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1
cy5nZXQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOworICAg
IGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5VmFy
aWFudCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhl
ci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1f
aWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lk
ZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAgICBLaW5kIG1f
a2luZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9v
bGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIgfTsK
KyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CisgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNw
cAppbmRleCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3Li5mY2UwZjRk
OGVlMTBlZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02MiwxMCArNjIs
MTAgQEAgR2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3RhdHVzKGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAg
IAotUHV0QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBzdGF0dXMpCitQ
dXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29kZU9y
aWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsKLSAgICBhdXRv
IHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsKLSAgICBQdXRC
eUlkU3RhdHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBzdGF0dXNQdHIg
PSBtYWtlVW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3RhdHVzKiByZXN1
bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29k
ZU9yaWdpbiwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTEwNyw2ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRlSW1w
bChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAgICAg
ICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8m
IHBhaXIgOiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCmlu
ZGV4IGJkMTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0OTgzZGJjNzY3
ZDA3ZTI4MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgIkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNpbmNs
dWRlICJJbkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUg
IlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7
CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNvbnN0IENvZGVP
cmlnaW4mLCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVzKiBhZGRHZXRC
eVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsKLSAgICBQdXRC
eUlkU3RhdHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBQdXRC
eUlkU3RhdHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVP
cmlnaW4mLCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFkZEluQnlTdGF0
dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBEZWxldGVCeVN0
YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0ZUJ5
U3RhdHVzJik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVCcmFuZFN0YXR1
cyYpOwpAQCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAgCiAg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtT
dGF0dXM+Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVu
aXF1ZV9wdHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVP
cmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0dXM+Pj4gcHV0
czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxJbkJ5
U3RhdHVzPj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5p
cXVlX3B0cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzPj4+IGNo
ZWNrUHJpdmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZjZWIyM2RjM2Nj
MjFkMzI3ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRmNzgxOWQ0NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpy
ZXNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogYwog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0R2V0Qnko
Y29kZUJsb2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJs
b2NrLCAqdGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICByZXNl
dFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0UHV0QnkoY29k
ZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWNjZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJsb2NrLCAqdGhp
cywgSW5CeUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEyOGU2ZTI1MDFh
YWIxOGU1NWQ0MWE0Li5lNjdiYzEwOGJlMzIwZGQ2ZDI1OWU3N2M4MWI5ZDUxYzQ1Y2Y1ODRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaApAQCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Qgewog
ICAgIEdldEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZhbCwKLSAgICBQ
dXQsCisgICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZh
bCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTM2NSw2ICszNjYsNyBAQCBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbyB7CiAgICAgICAgIEdQUlJlZyBicmFuZEdQUjsKICAgICB9IHJlZ3M7CiAgICAg
R1BSUmVnIG1fc3R1YkluZm9HUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fYXJy
YXlQcm9maWxlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgR1BSUmVnIHZhbHVlVGFnR1BSOwogICAgIC8vIEZJWE1FOiBbMzItYml0c10gQ2hlY2sgaWYg
U3RydWN0dXJlU3R1YkluZm86OmJhc2VUYWdHUFIgaXMgdXNlZCBzb21ld2hlcmUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKaW5kZXggZDFjMGI0NmE2YTkwNzM5MDM1OWRkMzBjMGNlNjhjMTFjMTdiMjgyMS4u
MDdjMmQxZjM1ZGIyZjU5NDYxYTQ5NzQ5NWEzZmEyYzc0NDZjNzdhNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaApAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9yLmgi
Ci0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAj
aW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC0zOTczLDcgKzM5NzMsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVz
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9
IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAgICAgICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlU2V0IHRoaXNTZXQgPSAqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNl
KTsKICAgICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKQEAgLTM5ODIsNyArMzk4Miw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRo
aXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CiAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJn
ZSh0aGlzVmFsdWUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXNT
ZXQub25seVN0cnVjdHVyZSgpICE9IG5ld1N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0zOTkwLDcgKzM5OTAsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgICAgICAgICAgICAgIH0gLy8gZWxzZSB0aGlzIGlzIHJlYWxseSBhIHJl
cGxhY2UuCiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIG5ld1Nl
dC5tZXJnZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDE0MCwxMCAr
NDE0MCwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAoT3B0aW9uczo6
dXNlQWNjZXNzSW5saW5pbmcoKSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAg
ICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0IHx8
IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkOwogICAgICAgICAgICAgYXV0byBwcml2
YXRlRmllbGRQdXRLaW5kID0gbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQgPyBub2Rl
LT5wcml2YXRlRmllbGRQdXRLaW5kKCkgOiBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCk7Ci0g
ICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0
dXJlU2V0KCksCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnVp
ZCgpLAorICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAg
ICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAgICAg
IGJvb2wgYWxsR29vZCA9IHRydWU7CkBAIC00MTUxLDcgKzQxNTEsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0
OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2
YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
Z3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKQEAgLTQxNjIsMTQgKzQxNjIsMTQgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJl
ID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNp
dGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQu
YWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlJlcGxhY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdT
ZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0NzMsNyAr
NDQ3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBFeGl0T0s6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC00NjUyLDEw
ICs0NjUyLDEwIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmZpbHRlcklDU3RhdHVzKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCi0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOiB7CisgICAgY2FzZSBGaWx0ZXJQdXRC
eVN0YXR1czogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKLSAg
ICAgICAgICAgIG5vZGUtPnB1dEJ5SWRTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0dXJl
LnRvU3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgbm9kZS0+cHV0QnlTdGF0dXMoKS0+Zmls
dGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGMyMTZhMzk2ZDcxNjA0MjBkZmI0ODE1
ZjEyN2U3ODU5ZDVhOTE3M2IuLjZlMjc1MzEwNGJkMzgxNTljY2IxYjFkMzkzNzE1Mzg2YjY0ODZi
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxp
bWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtNDAyLDcgKzQwMiw3IEBAIGNsYXNzIEFyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpA
QCAtMTI2NSw3ICsxMjY1LDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0
QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggNjNl
NjhkMDM3ZmUxMTEwMWFlNDEyYTI3ODIyNTNmNTk0M2JkNjI3Yi4uODZjYzZmYWJiNTU2NzExY2I3
NzM3NzhjOWZjMGU0NDVkMGU4ZjdlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJBcnJh
eVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkJ1aWx0aW5OYW1lcy5oIgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtNzQsNyArNzMs
NyBAQAogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlByaXZhdGVG
aWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdFeHBQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNsdWRl
ICJTdGFja0FsaWdubWVudC5oIgpAQCAtMjM5LDExICsyMzgsMTEgQEAgY2xhc3MgQnl0ZUNvZGVQ
YXJzZXIgewogICAgIGJvb2wgY2hlY2tQcmVzZW5jZShKU09iamVjdCoga25vd25CYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAg
ICB2b2lkIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAgIC8v
IFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRC
eUlkVmFyaWFudC4KKyAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUg
c2V0dGVyIGZvcm0gb2YgUHV0QnlWYXJpYW50LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhcmlh
bnRUeXBlPgogICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJik7CiAKLSAgICBOb2RlKiBz
dG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFu
dCYsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICB2b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlv
biopOwpAQCAtMjUzLDEzICsyNTIsMTMgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAgIHZv
aWQgaGFuZGxlR2V0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVz
dGluYXRpb24sIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzKTsKICAg
ICB2b2lkIGVtaXRQdXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBF
Q01BTW9kZSk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5vZGUq
IHZhbHVlLCAgY29uc3QgUHV0QnlTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CiAg
ICAgdm9pZCBoYW5kbGVQdXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0
QnlJZFN0YXR1cyYsCisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYs
CiAgICAgICAgIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01B
TW9kZSk7CiAKICAgICB2b2lkIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKLSAgICAgICAgTm9k
ZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5kKTsK
KyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwgUHJpdmF0ZUZpZWxk
UHV0S2luZCk7CiAKICAgICB2b2lkIGhhbmRsZURlbGV0ZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgRGVsZXRlQnlTdGF0dXMsIEVDTUFNb2RlKTsKQEAgLTQ1
MTQsNyArNDUxMyw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAg
ICAgIC8vIHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZSBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNl
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZgogICAgICAgICAgICAgICAgIC8vIHRo
ZSBzdHJ1Y3R1cmVzIGluIHRoZSB2YXJpYW50LnN0cnVjdHVyZVNldCgpIGFncmVlIG9uIHRoZSBw
cm90b3R5cGUgKGl0IHdvdWxkIGJlCiAgICAgICAgICAgICAgICAgLy8gaGlsYXJpb3VzbHkgcmFy
ZSBpZiB0aGV5IGRpZG4ndCkuIE5vdGUgdGhhdCB3ZSBhcmUgcmVseWluZyBvbiBzdHJ1Y3R1cmVT
ZXQoKSBoYXZpbmcKLSAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhh
dCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0
QnlJZFN0YXR1cyB3b3JrLgorICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50
LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1
cy9QdXRCeVN0YXR1cyB3b3JrLgogCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJpZ2h0IG5v
dywgaWYgd2UgaGF2ZSBhbiBPUENTLCB3ZSBoYXZlIG1vbm8gcHJvdG8uIEhvd2V2ZXIsIHRoaXMg
d2lsbAogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJl
IG9uY2Ugd2UgaGF2ZSBhIGh5YnJpZCBkYXRhIHN0cnVjdHVyZSBmb3IKQEAgLTQ1OTMsOSArNDU5
Miw5IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIHJldHVybiBsb2FkZWRWYWx1
ZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkK
K05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxh
Y2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoYmFzZSwgbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgp
KTsKICAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFsdWUpOwpAQCAtNDk5OCwzOSArNDk5NywzOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbkJ5SWQoVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBi
YXNlLCBDYWNoZQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKLSAgICBO
b2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVlLCBj
b25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9k
ZSBlY21hTW9kZSkKKyAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNE
aXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlmIChpc0RpcmVjdCkKICAgICAgICAg
YWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21h
TW9kZSksIGJhc2UsIHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIGFkZFRvR3JhcGgocHV0QnlJ
ZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8oaWRl
bnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgYWRkVG9H
cmFwaChwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBP
cEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKIH0KIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wg
aXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkK
KyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5dGVj
b2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKLSAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8
ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewor
ICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21h
TW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZU
TCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51
bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8
fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQ
b2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0
U2l6ZSgpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1
ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIHx8IHB1
dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lu
bGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRp
ZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB1
dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5U3Rh
dHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlm
IChwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5z
aXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlm
ICghY2hlY2socHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgewot
ICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwg
cHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRC
eVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUwMzksMjggKzUwMzgsMjgg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKFVOTElL
RUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBi
YXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3Jh
cGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9y
aWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAg
IGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMo
KSkgewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xk
U3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zm
c2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZh
cmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMo
KTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAg
ICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRT
dGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0
dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0
QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlk
U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5
SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAg
ICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRl
clB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwog
CiAgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MDY4LDEy
ICs1MDY3LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29k
ZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlh
bnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5j
b25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAg
ICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0Rp
cmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTUx
MzUsMTIgKzUxMzQsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6
U2V0dGVyOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZh
cmlhbnQ6OlNldHRlcjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIE5vZGUq
IGxvYWRlZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50KTsKICAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewotICAgICAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0
LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2
YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01MTg0LDI2ICs1MTgzLDI2IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQogICAgIAogICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0gfQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2
YXRlTmFtZUJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQ
dXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVG
aWVsZFB1dEtpbmQpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3Rh
dHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9u
czo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNT
ZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51
bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAg
aWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9T
UkV4aXQpOwogICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJp
YW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0
QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFudHMo
KSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5U3Rh
dHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGlj
QWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsK
KyAgICAgICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQ
b2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewogICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZh
dGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTUyMTEsMjkgKzUyMTAsMjkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxh
dGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5l
ZFB1dEJ5SWQoKTsKICAgICAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAg
YWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0
YXR1cykpLCBiYXNlKTsKICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0
IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAg
ICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRy
YW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJp
YW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQ
dXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRk
KCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwor
ICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAg
IGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRU
b0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRC
eUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEp
OworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAg
IAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlOiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVz
ZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMp
KSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIHN0b3JlKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MjQxLDkgKzUyNDAsOSBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogeworICAg
IGNhc2UgUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRl
RmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwor
ICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3Bs
YW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgp
KSkgewpAQCAtNjQ1NCw0MCArNjQ1MywzMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNv
ZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBib29sIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0g
ZmFsc2U7CiAKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0
dXM7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
ICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2Vs
aW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRleCgp
KSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBieXRlY29k
ZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJlY29tZXMg
bnVsbC4KLSAgICAgICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9y
bWF0aW9uLiBGb3IgYHB1dF9wcml2YXRlX25hbWVgLCB3ZSBtaWdodCBoYXZlIHNvbWUgaW5mbyBm
cm9tCi0gICAgICAgICAgICAgICAgLy8gTExJbnQgSUMsIGluY2x1ZGluZyBjYWNoZWQgY2VsbCB0
aGF0IHdlIGNvdWxkIHVzZSBpZiBCeVZhbCBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY3NzkKLSAg
ICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvIAotICAgICAgICAgICAgICAgICAgICAmJiBieVZh
bEluZm8tPnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tT
bG93UGF0aAotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCi0gICAgICAgICAg
ICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFk
Q29uc3RhbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGlsZUFzUHV0QnlP
ZmZzZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZv
LT5jYWNoZWRJZDsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50aWZpZXIuaXNTeW1i
b2xDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFw
aC5pZGVudGlmaWVycygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9
IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgIGlm
ICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkSWRlbnQpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAg
ICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9w
LT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsK
KworICAgICAgICAgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBz
dGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1
aWQpOworICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
ZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
SWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgICAgICAgICAgcHV0
QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LAotICAgICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENv
ZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5h
bWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMs
IGJ5dGVjb2RlLm1fcHV0S2luZCk7CisgICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1
dEJ5T2Zmc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICh0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKLSAgICAgICAgICAgICAgICBo
YW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJl
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2luZCk7Ci0gICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICBpZiAoIXRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWUsIE9wSW5mbygpLCBPcEluZm8oYnl0
ZWNvZGUubV9wdXRLaW5kKSwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcHV0X3ByaXZhdGVfbmFtZSk7CkBAIC02NTY3LDEyICs2NTU2LDEyIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdz
LmlzRGlyZWN0KCk7CiAKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBwdXRC
eVN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLAotICAgICAgICAgICAgICAg
IGN1cnJlbnRDb2RlT3JpZ2luKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVt
YmVyXSk7CisgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0
dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUo
KSk7CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeVN0YXR1
cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIApA
QCAtNzk3OSwxMyArNzk2OCwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC53YXRjaEdsb2JhbFBy
b3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnRpZmllck51bWJlcikpCiAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICAgICAgICAgIFB1dEJ5SWRT
dGF0dXMgc3RhdHVzOworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1czsKICAgICAg
ICAgICAgICAgICBpZiAodWlkKQotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlLCBQ
cml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMg
PSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgZmFsc2UsIFByaXZhdGVGaWVsZFB1
dEtpbmQ6Om5vbmUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzKFB1dEJ5SWRTdGF0dXM6OlRha2VzU2xvd1BhdGgpOwor
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQdXRCeVN0YXR1cyhQdXRCeVN0YXR1czo6TGlr
ZWx5VGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50
cygpICE9IDEKLSAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRC
eUlkVmFyaWFudDo6UmVwbGFjZQorICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2lu
ZCgpICE9IFB1dEJ5VmFyaWFudDo6UmVwbGFjZQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0
dXNbMF0uc3RydWN0dXJlKCkuc2l6ZSgpICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQdXRCeUlkLCBPcEluZm8oQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywgdWlkKSksIE9wSW5mbyhieXRlY29kZS5tX2dldFB1dEluZm8uZWNtYU1vZGUoKSksIGdldChi
eXRlY29kZS5tX3Njb3BlKSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC04ODE5LDQ1ICs4ODA4LDI3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlIGJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJ
bmRlCiAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgYm9vbCBp
c0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAg
ICBib29sIGNvbXBpbGVkQXNQdXRCeUlkID0gZmFsc2U7Ci0gICAgewotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIFB1dEJ5
SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3At
Pm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29k
ZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0
ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNv
bWVzIG51bGwuCi0gICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5vIGluZm9y
bWF0aW9uLgotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAmJiBi
eVZhbEluZm8tPnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+dG9va1Ns
b3dQYXRoCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVl
KSkgewotICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJZDsKLSAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShpZGVudGlm
aWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CiAKKyAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ss
IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJl
bnRDb2RlT3JpZ2luKCkpOworCisgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZFR5cGUpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICBp
ZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZp
ZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIu
dWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXND
ZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5m
cmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1aWQtPmlzU3ltYm9sKCkpOwor
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBj
dXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgs
IGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1dEJ5SWQgPSB0
cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAg
ICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9l
Y21hTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewpAQCAtODg2
OCw4ICs4ODM5LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVj
b2RlIGJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRlCiAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKHZhbHVlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIExlYXZl
IHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxw
dHIpOyAvLyBMZWF2ZSByb29tIGZvciBsZW5ndGguCi0gICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6
VmFyQXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFsRGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oYnl0ZWNvZGUubV9lY21hTW9kZSkpOworICAgICAgICBO
b2RlKiBwdXRCeVZhbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBpc0RpcmVjdCA/IFB1dEJ5
VmFsRGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8o
Ynl0ZWNvZGUubV9lY21hTW9kZSkpOwogICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBQdXRC
eVZhbCBhbmQgUHV0QnlWYWxEaXJlY3QgbXVzdCBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgY2xvYmJl
ciBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIHRoZW0gZ2VuZXJpYy4KKyAg
ICAgICAgaWYgKHN0YXR1cy5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSkKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuYWRkKHB1dEJ5VmFsKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOTE2NDcw
ZDE3ZDUzYWYzNTZiZDUxNDRjOTRlNjA3ZGEwNzk1OGI0YS4uNmYyMDRkMmM1ZGUwYTYxMmY3MzFj
OTU3YjQ2MWRjZjMwYzRhMTFhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKQEAgLTU2OSw3ICs1NjksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAg
IGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCmluZGV4IDg2YTNkMDc2NjRkN2ZhOTI3
NTEyOTk3NzlmNDZmMTk3MmIwYWQwZjMuLjRjZTlmZjBlYjVkYTUxMGVjMjM0MDY0NjJhNzFlODgw
OTUwOTYyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0
QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAKaW5kZXggZWFlYWY4NWVhMjU0MTcyNTc1NWY0OGNlZmRlZGUwM2I4MWM5ZmEyYS4u
Yjg4MjVhY2FlMzRlNTVmODkyNjU5MTI5ODQxZDkzMjRhNDBjMTYxNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAg
LTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5U3Rh
dHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMu
aCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUwMSw3ICs1MDEsNyBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgCiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJp
YW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5VmFy
aWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQub2xkU3RydWN0dXJlKCkuZ2VuZXJpY0ZpbHRlcihbJl0gKFN0cnVjdHVyZSogc3RydWN0
dXJlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVmFsdWUu
Y29udGFpbnMobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CkBAIC01MTMsMTEgKzUxMyw5IEBAIGNsYXNzIENvbnN0YW50Rm9sZGlu
Z1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKHZhcmlhbnQuaWRlbnRp
ZmllcigpLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw3ICsxMjExLDcgQEAgY2xhc3MgQ29uc3RhbnRG
b2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRC
eU9mZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgfQogCi0gICAg
dm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBj
b25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYg
YmFzZVZhbHVlLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIpCiAgICAgewogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdp
bjsKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKQEAgLTEyMjQsNyAr
MTIyMiw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAgICAgICBUcmFu
c2l0aW9uKiB0cmFuc2l0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIHRyYW5zaXRp
b24gPSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
cmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBt
X2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAg
ICAgfQpAQCAtMTI2OSw3ICsxMjY3LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChkYXRhLCBw
cm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sg
PSBjYW5FeGl0OwogCi0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJp
YW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoZGlkQWxsb2NhdGVTdG9yYWdlKSB7
CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIE51a2VTdHJ1Y3R1cmVBbmRTZXRC
dXR0ZXJmbHksCkBAIC0xNDA2LDEwICsxNDA0LDEwIEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgaWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBQdXRCeUlkU3RhdHVz
IHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIFB1dEJ5U3RhdHVz
IHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgIGJhc2VWYWx1ZS5t
X3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxl
SWRlbnRpZmllcigpLnVpZCgpLAorICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmll
cigpLAogICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAg
ICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCkBAIC0xNDI0LDggKzE0MjIsOCBAQCBjbGFzcyBD
b25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAKICAgICAgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlv
bnM7Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMu
dmFyaWFudHMoKSkgewotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2
YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRp
dGlvblNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0
aW9uKGNvbmRpdGlvbikpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0
NDgsNyArMTQ0Niw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAg
ICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVs
ZFB1dEtpbmQuaXNOb25lKCkgfHwgcHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKICAgICAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0
KCkuaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKQEAgLTE0NjQsOCArMTQ2Miw4
IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
YWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFu
dCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1
dEJ5SWRTdGF0dXMsIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIHN0YXR1cykpLAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmls
dGVyUHV0QnlTdGF0dXMsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBzdGF0dXMpKSwKICAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUpKTsKIAogICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3Vy
ZSh1aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDYwZmJi
MTVjNTkxNmI4OWRiNGM2ZDU1MTUwYzY2NTNjMzdlMThmMWUuLmU2NDgxNjdjMTE4NmJjOGM5M2Yz
MmU4YzU0YmU3NTE4MzBlZjExMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5r
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRC
eUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCmluZGV4IGFhNDk2NGU5YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3
Mzg1MDkuLmUyNWIxZjM4NTQ5MzU0YWUxMzJhZGRiY2I2OGFjYjlkYTgwYjUyOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMTIzNiw2ICsxMjM2
LDEwIEBAIGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgZml4RWRnZTxTeW1ib2xVc2U+KGNoaWxkMik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJlZ2lzdGVy
IHByZXNzdXJlIG9uIDMyLWJpdCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCkBAIC0yODY1LDcgKzI4
NjksNyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBD
UFVJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZl
MGYzLi4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBu
b2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdldEJ5U3Rh
dHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRT
dGF0dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygp
KTsKKyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JN
ZXRhZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAi
LCBub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNK
dW1wKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNjJhMWZlZjNkYzJj
ZGRlMTA5MTUyNGQ2NzM0MDg0MGZkM2YyNjBiMS4uMWJlYzhkZWVkOWRiZGJhNTA3ZDlhM2ZiMWIw
MzllMjZlZTFhZGQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMTIw
Miw2ICsxMjAyLDcgQEAgY2xhc3MgR3JhcGggZmluYWwgOiBwdWJsaWMgdmlydHVhbCBTY2FubmFi
bGUgewogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3ltYm9sU3RydWN0dXJlOwogCiAgICAgSGFz
aFNldDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CisgICAgSGFzaFNldDxOb2RlKj4gbV9zbG93UHV0
QnlWYWw7CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2
aXNpdENoaWxkcmVuSW1wbChWaXNpdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJk
MjNjYjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiAr
MjUyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQog
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9pbkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTky
Li4zNjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNs
YXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJ
ZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNs
b3dQYXRoKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZh
bEdlbmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAg
ICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNv
bnN0IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJ
VERlbEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBj
bGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxp
bmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlk
c1dpdGhUaGlzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5l
cmF0b3I+LCA0PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJ
VFB1dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNo
ZVdyYXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0
b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRz
OwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0
PiBtX2RlbEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdl
bmVyYXRvcj4sIDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJi
ZDRhZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1h
eUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAg
ICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCmluZGV4IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEy
MDIwMTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmll
bGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRC
eVZhcmlhbnQuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVk
ZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcg
KzkyLDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlP
ZmZzZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQ
dXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4g
dmFyaWFudHM7CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAg
Ym9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQ
dXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9
CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0
dXMqIHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVz
KCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAg
ICAgIEFTU0VSVChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFz
PFB1dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMz
NzFhMDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJl
ZTVmZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBA
IC01NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
RmlsdGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJ
bkJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0
YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1
cywgTm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1
YTQxNmVhYmViYjllMjIyMzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEw
Y2JlZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sq
IGJhc2VsaW5lQ28KIAogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAg
IGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlu
bGluZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9y
IHRoaXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMg
cG9zc2libGUgdGhhdCB3ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQn
cyBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEu
IEJhc2VsaW5lIENvZGVCbG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8g
Mi4gKEEpIGdldHMgREZHIChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29s
bGVjdHMgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1
Y3R1cmVTdHViSW5mbyBmcm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBj
YWxsLgotICAgICAgICAgICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNp
bmNlIGl0IGlzIG5vdCBleGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAg
ICAgICAgICAgLy8gNS4gVGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4g
U28gKEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVC
bG9jayBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIp
IGF0dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRC
eUlkIChvcmlnaW5hbGx5LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNl
IChBKSdzIEpJVERhdGEgaXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8o
Q29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5m
by0+ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVP
cmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
dWJJbmZvKTsKICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9u
LnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRl
eCA2Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBk
ZWM2ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAK
QEAgLTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAt
MjU1NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBu
b2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1l
YW5zIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNh
biBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBl
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFy
ZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJy
ZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52
YXJpYW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQs
IGN1cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQg
PSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQo
c3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVy
biBtX2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKaW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVm
NGQ4NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKQEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
aW5kZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUw
YjYzMjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1By
aXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0
ZTJkNmI1ZDk5M2ViNmIuLjYwM2ZmN2IyZTUyZGNlZWUzYmMzNjVkYmM0ZWUzM2IzYzM3ZTFkMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcApAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBj
YXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAppbmRleCA4ODA4YjEwYzgyNmM1MTA2OTc5NzQwMDllOTZmMTk5ZmE4ZjEw
YTRjLi4yMzgwN2I2MTgyNzhhMTRkZDJjYTVmMzgyYzk3YzgzYWZhYTA3OGI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTMx
NzcsMzQgKzMxNzcsOTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKICAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzogewogICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2Rl
LCBub2RlLT5vcCgpID09IFB1dEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Qs
IG5vZGUtPm9wKCkpOwotCi0gICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxs
VXNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5n
KG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwotICAgICAgICAgICAgICAgICAgICBhbHJl
YWR5SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkgfHwgKGNoaWxkMS51
c2VLaW5kKCkgIT0gQ2VsbFVzZSAmJiBjaGlsZDEudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmco
bm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
bHJlYWR5SGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNl
S2luZCgpID09IFN5bWJvbFVzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJvbFVz
ZSkgewotICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJv
bChub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgICAgICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBjaGls
ZDEpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgY2hpbGQyKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxkMyk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJn
M0dQUiA9IGFyZzMuZ3ByKCk7CisgICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9u
U3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJn
M0dQUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAg
ICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcxKHRoaXMsIGNoaWxkMSk7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRo
aXMsIGNoaWxkMik7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxk
Myk7Ci0gICAgICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgYXJnM0dQ
UiA9IGFyZzMuZ3ByKCk7Ci0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpCi0gICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0LCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgp
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwg
YXJnM0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAg
ICAgCisKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQx
KTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMiwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIGNoaWxkMywgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHViSW5mbzsKKyAgICAgICAgICAg
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAgICAgICAgICBzdHVi
SW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mb0dQUiA9
IHN0dWJJbmZvLmdwcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgY2hpbGQyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBjaGlsZDMpOworCisg
ICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7
CisgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNp
dGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4s
IG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBu
b2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0OworICAgICAgICAgICAgRUNNQU1vZGUgZWNtYU1v
ZGUgPSBub2RlLT5lY21hTW9kZSgpOworCisgICAgICAgICAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCisgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJ
VCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1Yklu
Zm9HUFIsIGVjbWFNb2RlLCBpc0RpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5v
dERpcmVjdCk7CisKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5
cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNo
aWxkMikuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMikuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKworICAgICAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVy
YXRvcj4gc2xvd1BhdGg7CisgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
c2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2Vu
LnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgbnVsbHB0cik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0cik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG1faml0LmFkZFB1dEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOworICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOworCiAgICAg
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1
ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTg3MSw3ICs1OTMxLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0
YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJ
ZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5C
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCmluZGV4IGI5MDY2
NWVjY2U1MmM1N2Y0NGI3MGQ0NjdjNGE0ZTVhNWYzNzAyZTAuLjkzMWJhYjUwMzM2MWU5NzIwZjcy
YmQ2NjcxOWI3YTYxN2VkOWQzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC0yMzMsNiAr
MjMzLDE1IEBAIGNsYXNzIFN0b3JlQmFycmllckluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6IHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKKyAgICAgICAgICAg
ICAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheTogeworICAgICAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UgfHwgY2hp
bGQxLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zaWRlckJhcnJpZXIoY2hpbGQxLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMw
ZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdi
YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEy
LDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0
QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5
NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1
czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRC
eVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5
ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00
MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAppbmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4
ZWY3MTAwLi41NzUyNjQyMDIzN2FiYjBmYWU3YTc1ZTYwMjQ0NzY3NTFlZjMxN2E5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcg
KzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAg
ICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpAQCAtNTU1Niw1NyArNTU1NiwxNTUgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAgICAgICAgY2FzZSBB
cnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAg
ICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAgICAgICAg
ICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENl
bGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxs
U3RyaW5nTm9uU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0
cmluZ1N0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdOb25T
dHJpY3Q7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250YWlucyht
X25vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQo
KSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NK
IG9wZXJhdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5n
U3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxs
U3RyaW5nTm9uU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3RyaW5nKGNoaWxkMiksIGxvd0pT
VmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlv
biwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTdHJpbmco
Y2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2lu
ZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgp
ID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2Rl
LT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25v
ZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0OworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNt
YU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3Bl
cmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N5
bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZt
Q2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwo
Y2hpbGQxKSwgbG93U3ltYm9sKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOwotICAgICAgICAgICAg
aWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdE5vblN0cmljdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
OworICAgICAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOworICAgICAg
ICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdDsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICAgICAgICAg
IFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAgICAgICAg
ICAgICAgICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFs
dWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAgIFZvaWQs
IG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKGNoaWxkMSksIGxvd0pTVmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMp
KTsKKworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKworICAgICAgICAgICAgTFZh
bHVlIGJhc2UgPSBsb3dDZWxsKGNoaWxkMSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHkg
PSBsb3dKU1ZhbHVlKGNoaWxkMiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoY2hpbGQyKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShjaGlsZDMpOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3RyaW5nID0gZmFs
c2U7CisgICAgICAgICAgICBib29sIHByb3BlcnR5SXNJbnQzMiA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBwcm9wZXJ0eUlzU3ltYm9sID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYWJzdHJh
Y3RWYWx1ZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUo
Y2hpbGQyKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlJ
c0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUoY2hpbGQy
KS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CisKKyAgICAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0
LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIoYmFzZSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
cHJvcGVydHkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHZh
bHVlKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX25vdENlbGxNYXNrLCBWYWx1
ZVJlcDo6bGF0ZVJlZyhHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQobV9udW1iZXJUYWcsIFZhbHVlUmVwOjpsYXRlUmVnKEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6RlRMSklUKSA/IDEgOiAwOworCisgICAgICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRp
b25zKHBhdGNocG9pbnQpOworCisgICAgICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0
ZTsKKyAgICAgICAgICAgIENvZGVPcmlnaW4gbm9kZVNlbWFudGljT3JpZ2luID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljOworICAgICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX25vZGUtPmVj
bWFNb2RlKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbV9ub2RlLT5vcCgpID09IFB1
dEJ5VmFsRGlyZWN0OworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2lucy0+YWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChub2RlU2VtYW50aWNPcmlnaW4pOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgZGlyZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAgICAgICAg
ICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPSBleGNlcHRpb25I
YW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBleGl0IGZvciBjYWxsIElDJ3MgY3JlYXRlZCBieSB0
aGUgSUMgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyB0byBk
byBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3Nv
Y2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRl
eC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9u
Rm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gcGFyYW1zWzJdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRj
aCgwKSA6IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9
IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgICAgIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSLCBlY21hTW9kZSwgaXNEaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRL
aW5kOjpOb3REaXJlY3QpOworCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3RyaW5nID0gcHJvcGVydHlJc1N0cmluZzsKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHByb3BlcnR5SXNJbnQzMjsK
KyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wg
PSBwcm9wZXJ0eUlzU3ltYm9sOworCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0
ZUZhc3RQYXRoKGppdCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25l
ID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENh
bGw7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2Rl
U2VtYW50aWNPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5n
ZXQoKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1h
bnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpKS5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbiwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50
aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCB2YWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1
YkluZm8oKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkuY2FsbCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGRvbmUsICZqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0
U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRoQ2FsbCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVmZmVyLCBs
aW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC04OTUxLDcgKzkwNDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAg
ICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgYmFzZVNldDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRh
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZh
cmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKVtqXSk7CiAgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKQEAg
LTg5NjYsMTYgKzkwNjQsMTYgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJs
b2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICBQdXRCeVZhcmlh
bnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAKICAgICAgICAgICAgIExWYWx1ZSBzdG9y
YWdlOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQu
b2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gYmFzZTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRy
KGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7CisgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09
IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KAogICAgICAgICAgICAg
ICAgICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpOwpAQCAtODk4Nyw3ICs5MDg1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwg
ZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZh
cmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50
eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wu
cmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgppbmRleCA2OTdkZThk
OThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4Li43OGZkNDk0M2Y5ZWNiYzRjMzVjN2Nk
Y2IzMmI3Mzc3Y2FiOWYxZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5y
YgpAQCAtMTQxLDcgKzE0MSw3IEBAIGRlZiBzZWxmLndyaXRlX2J5dGVjb2RlX3N0cnVjdHMoYnl0
ZWNvZGVfbGlzdCwgYnl0ZWNvZGVfc3RydWN0c19maWxlbmFtZSkKICNpbmNsdWRlICJKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQcml2
YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUg
IlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiVG9U
aGlzU3RhdHVzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKaW5kZXggZjA0YzFm
NDI4ZTEwYmZjNzFmYTVjZTM1ZTAwMjg2OGJiNzhhZGVmNi4uOTFiM2IzMTU1MTBkYTY4MjRiM2M5
NjM0MTBlMzM2ZDk1ODlhYmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKQEAg
LTY3LDEwICs2NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhPcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0QnVpbGRMaXN0KSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKICAgICBtYWNybyhPcGVyYXRpb25Q
dXRCeUlkUHV0UHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6ZSkgXAotICAgIG1hY3JvKFB1
dEJ5SWRBZGRBY2Nlc3NDYXNlKSBcCi0gICAgbWFjcm8oUHV0QnlJZFJlcGxhY2VXaXRoSnVtcCkg
XAotICAgIG1hY3JvKFB1dEJ5SWRTZWxmUGF0Y2gpIFwKLSAgICBtYWNybyhJbkJ5SWRTZWxmUGF0
Y2gpIFwKKyAgICBtYWNybyhQdXRCeUFkZEFjY2Vzc0Nhc2UpIFwKKyAgICBtYWNybyhQdXRCeVJl
cGxhY2VXaXRoSnVtcCkgXAorICAgIG1hY3JvKFB1dEJ5U2VsZlBhdGNoKSBcCisgICAgbWFjcm8o
SW5CeVNlbGZQYXRjaCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhKdW1wKSBcCiAgICAg
bWFjcm8oRGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMpIFwKICAgICBtYWNybyhPcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggYzli
MDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThlZmE0NzEzMi4uNTBkZTg1NWI2YWM5MGVlNmQz
ZDFjOTYxZTQ0ODQ4MjM5NWE0NjE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAt
NTEwLDYgKzUxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
bV9nZXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID0gMDsKICAg
ICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2lu
QnlJZEluZGV4ID0gMDsKICAgICBtX2luQnlWYWxJbmRleCA9IDA7CiAgICAgbV9kZWxCeUlkSW5k
ZXggPSAwOwpAQCAtNjYyLDYgKzY2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkSW5kZXggPT0gbV9nZXRCeUlkcy5z
aXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggPT0gbV9n
ZXRCeUlkc1dpdGhUaGlzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9wdXRCeUlkSW5k
ZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlWYWxJ
bmRleCA9PSBtX3B1dEJ5VmFscy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5CeUlk
SW5kZXggPT0gbV9pbkJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9pbnN0YW5j
ZU9mSW5kZXggPT0gbV9pbnN0YW5jZU9mcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1f
cHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPT0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5zaXplKCkp
OwpAQCAtOTA5LDYgKzkxMSw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
ZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5
VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywg
cGF0Y2hCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggNmM0ZjExZjY4ZTkwM2Vi
YTY3YzZkN2VhOTM4N2Q4MWI0NTZhZTBmNS4uOWZhOGFjOTljOWI5OTQyOGZjYzA3NTZlNjRmZjNi
MzdkZTQ2OTQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yMjUsMjggKzIyNSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2sp
OwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+
KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQo
dm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8
T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhD
YWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2Nr
KTsKQEAgLTI2OCwxMCArMjQ2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7CiAKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCkBAIC0zODIsMzgg
KzM1Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BS
LCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVT
dG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwotICAgICAg
ICAKLSAgICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJl
Z1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgotICAgICAgICAvLyBUaGUgdmFsdWUg
dG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAot
ICAgICAgICAvLyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJl
IGlzIGFscmVhZHkgcHJvZmlsZWQuCi0gICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMu
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50
MzJQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0Nv
bnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBJbnQzMlNoYXBl
KTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVt
cExpc3QgZW1pdERvdWJsZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8sIERvdWJsZVNoYXBlKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwo
T3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1NoYXBlID0gQ29udGlndW91c1NoYXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVk
QXJyYXlUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNN
QU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtMTA2NCw2ICsxMDA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxKSVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAg
ICAgIFZlY3RvcjxKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhp
czsKICAgICAgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAg
ICAgIFZlY3RvcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZl
Y3RvcjxKSVRJbkJ5SWRHZW5lcmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVElu
QnlWYWxHZW5lcmF0b3I+IG1faW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2Vu
ZXJhdG9yPiBtX2RlbEJ5SWRzOwpAQCAtMTA5MSw2ICsxMDM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAg
IHVuc2lnbmVkIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1
bnNpZ25lZCBtX3B1dEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1f
cHV0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5k
ZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRf
TUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuY3BwCmluZGV4IDY5YmYxYTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLjRm
YWU1YWQ2NzFmZDBlYjVmZjU3MTA1N2I0YWQ1MzBhNDA0MWM3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0x
NDIsNyArMTQyLDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAg
ICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRH
ZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAg
ICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwg
c3R1YkluZm9HUFIpCiAgICAgICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBt
X3B1dEtpbmQocHV0S2luZCkKIHsKQEAgLTM4MSw2ICszODEsNjggQEAgdm9pZCBKSVRHZXRCeVZh
bEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNs
b3dQYXRoKQogICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93
UGF0aFN0YXJ0TG9jYXRpb247CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZh
bEdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgYXJy
YXlQcm9maWxlR1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRL
aW5kIHB1dEtpbmQpCisgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwg
Y2FsbFNpdGVJbmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fZWNtYU1v
ZGUoZWNtYU1vZGUpCisgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKKyAgICAsIG1fYmFzZShiYXNl
KQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25zdGFudElk
ZW50aWZpZXIgPSBmYWxzZTsKKworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNlLnBheWxv
YWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVydHkucGF5
bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9hZEdQUigp
OworICAgIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyAgICBtX3N0
dWJJbmZvLT5tX2FycmF5UHJvZmlsZUdQUiA9IGFycmF5UHJvZmlsZUdQUjsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOwor
ICAgIG1fc3R1YkluZm8tPnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgbV9zdHVi
SW5mby0+di5wcm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlmCit9CisK
K3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImIGppdCkKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Cisg
ICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBh
dGNoYWJsZUp1bXAoKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9pZCBKSVRQ
dXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZm
ZXImIHNsb3dQYXRoKQoreworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwg
ZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOworICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHViSW5mby0+
bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQorCitWX0pJ
VE9wZXJhdGlvbl9HU3NpSkpDIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpzbG93UGF0aEZ1bmN0aW9u
KCkKK3sKKyAgICBzd2l0Y2ggKG1fcHV0S2luZCkgeworICAgIGNhc2UgUHV0S2luZDo6Tm90RGly
ZWN0OgorICAgICAgICBpZiAobV9lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoK
KyAgICAgICAgaWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgIEFTU0VSVChtX2VjbWFNb2RlLmlzU3Ry
aWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICBBU1NFUlQobV9lY21hTW9kZS5pc1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9Cisg
ICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFu
ZCwgR1BSUmVnIHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgKaW5kZXggZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uM2NlNWQz
N2QyYzQwZGM5OTA0OWUxMmFkNTMxNGI4OTVmNGMwMzQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEy
OSw3IEBAIGNsYXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBK
SVRCeUlkR2VuZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
KCkKLSAgICAgICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvcigKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsIEpTVmFsdWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0MCw0MiBAQCBjbGFzcyBKSVRQdXRC
eUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklU
T3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVD
TUFNb2RlIG1fZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpz
dHJpY3QoKSB9OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAg
IHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
KAorICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3Vs
dCwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSwg
UHV0S2luZCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1NldCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xv
d1BhdGhMaW5rQnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOworCisgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7
CisKK3ByaXZhdGU6CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3Qo
KSB9OworICAgIFB1dEtpbmQgbV9wdXRLaW5kOworCisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwor
ICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsK
K307CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDE3
YzI3ZmRjMWNkM2JmNjMyNmE0M2I1ZmVmODFlNjBlNmNjNDdmMDIuLjY3ZTBiNzgzMDlhNDNmMmJi
Yjk5YTkxYjM2ODliOTI3YjI2MmRiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCkBAIC0zNTIsNiArMzUyLDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlCiAgICAg
fQogfQogCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChS
ZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAg
ICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwg
QWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0
cnVjdHVyZUlEKCkpKTsKKyAgICB9Cit9CisKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7
CiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlT
dG9yZVRvSG9sZSgpKTsKQEAgLTM2MiwyNCArMzcwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0
QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJv
ZmkKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk91
dE9mQm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlN
b2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJvZmlsZVNhdyA9
IFtdIChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KSB7Ci0g
ICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJyYXlN
b2RlcywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9
IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChhcnJheVByb2Zp
bGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklURG91Ymxl
OwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCi0gICAg
ICAgIHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMs
IEFycmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKLSAg
ICByZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6
Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4ZDc3NWJlY2M3
MWY4MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRhOTcxOWEyOTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5
LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyAr
NzUxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyAr
NzgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0
dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4
MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1
cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1
YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBh
Y2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBl
KSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJs
b2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRl
bnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5m
bywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwog
ICAgIH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAo
SgogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAo
c3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwg
aWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAq
c3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICBy
ZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVj
dHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lk
IHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVl
LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1Zh
bHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
aW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsK
ICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0
aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRz
KCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5
UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
ICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGds
b2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1
cm47Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0
T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkg
PSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1
dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHVi
SW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwo
c3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJp
Y3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2
YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlw
dCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2Rl
KQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUlu
ZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbElu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJl
SW5kZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpA
QCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAg
ICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUt
PnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0x
MDAyLDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBi
YXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZh
bHVlLCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6
IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjpp
c0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJ
ZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1
dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwg
dmFsdWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1p
emF0aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVz
dWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0
aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2Rl
IGVjbWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2Vl
IGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwot
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBp
c0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAg
ICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZh
bHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VS
VCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUlu
ZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUu
Ci0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3Ry
dWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1
dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2sp
OwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAg
ICAgSklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4
aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0
dXJlKSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRj
aCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRo
ZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0
aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3Ry
dWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNo
ZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRv
UHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkg
fHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVj
bWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFi
bGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIg
cHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZl
VXApOwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8t
PnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8
T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRL
aW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAg
ICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2Ug
YSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ss
IHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNl
VmFsdWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxs
KHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAg
ICAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2lu
ZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJl
c3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1
bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0
YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1h
a2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9y
IGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9i
amVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3Ig
dXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5
bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRo
ZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291
bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0Owor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNl
VmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBw
cm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlv
blByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCBy
ZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIo
T1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0g
ICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
cHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFs
SW5mbywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJ
bmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0
aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09i
amVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBP
cHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1Yklu
Zm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5M
SU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5
UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxs
RnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNT
RVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFs
dWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNl
VmFsdWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1
cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7
Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAm
JiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9u
V3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkp
IHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNv
ZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAg
ICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0
QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1
YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0g
ICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0
aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEw
IHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJl
c3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkp
Ci0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRl
bnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjpp
c0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmpl
Y3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0
eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkg
IT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAg
ICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewot
ICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1
dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1
dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBh
IGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywg
c3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1v
ZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0
dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhz
OjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Cisg
ICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwg
c2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlv
blJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25S
ZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3
ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVu
IG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4g
Rm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8v
IG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBm
b3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBw
b2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8v
IHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRo
Q291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRp
b25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBk
aXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUs
IHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0Owog
fQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVj
bWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1
ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3Vs
dCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNv
ZGVCbG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihP
VVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAg
ICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkp
Ci0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3Jp
cHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9
CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkp
CitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRpcmVjdFB1dEJ5
VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFs
dWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5
KCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9k
ZSBlY21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAg
ICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJv
ZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30K
KworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBB
cnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7Cisg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBk
aXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlw
dCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0
KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3Qo
KSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vi
c2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3Qo
KSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1
ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAyNTg0ZTk5NWU0
NjZkZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0YmU4M2UwNmJl
MDYyNTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBC
eVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01B
TW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVy
aWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUq
LCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggM2QxZDg0ZmM4MjAyYmY4ODli
ZGYyMGVhMzM4ZGY4YTkxMTA5MDYzYi4uMWYwZjhmZjYxZjI5MjE2OTJlNzQ2ZTAyNTVkMDhmNTdk
ZTFhZGQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKQEAgLTQzOCwxNzggKzQzOCwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9k
ZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbD4g
PyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7CiAgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0
eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsK
LSAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1t
MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJv
cGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9
IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJl
c3MoJmJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7Ci0gICAgICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOwot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFNlZSBjb21tZW50IGluIG9wX2dldF9ieV92YWwuCi0gICAgICAgIHplcm9FeHRlbmQzMlRvV29y
ZChyZWdUMSwgcmVnVDEpOwotICAgIH0KLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKLQotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxk
IGRvIHRoaXMgaW5saW5lPwotICAgIGxvYWQ4KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CiAKLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9
IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNl
IEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3Vi
bGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3Vz
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCisgICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQsIGVjbWFNb2RlLCBwdXRL
aW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShi
YWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwg
YmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAg
IGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAg
ICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJn
ZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxp
bmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExh
YmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQz
MlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMp
KTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNF
aWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAg
IEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAo
KTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsK
LSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAg
IHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0
ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7
Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0g
ICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7
Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0
b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAg
IAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0g
ICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRy
dXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNv
bHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJh
bmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0
KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Us
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAg
Ci0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3Mo
cmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJy
YW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhp
cyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYyLDEyICs1
MTYsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxw
dHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUg
PSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc1LDE2ICs1MzIs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
YnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1tt
X3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAorICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworCisgICAgLy8gIlRyYW5zaXRpb24iIElDIGNsb2JiZXJzIHJlZ2lzdGVycywgc28gd2Ug
bmVlZCB0byByZWxvYWQgcmVnaXN0ZXJzIGJlZm9yZSBjYWxsaW5nIHRoZSBzbG93IHBhdGggb3Bl
cmF0aW9uLgogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZh
bEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
aXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDMsIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTY5
NSwyOCArNTU0LDI2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBh
cmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVu
dEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVyYXRp
b24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFsSW5m
by0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3Mg
PSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNzM3LDE4ICs1OTQsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9H
UFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFy
Z3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIz
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RH
UFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9iYWxP
YmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIGVj
bWFNb2RlR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBhcmVD
YWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwg
QnlWYWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7Cisg
ICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVsc2UK
ICAgICAgICAgaml0LnJldCgpOwogCkBAIC04MTAsMTMgKzY2NywxMyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZQogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIx
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZh
bEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BS
ID0gYXJndW1lbnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgdmFsdWVQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyks
IGJ5VmFsSW5mb0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwg
cHV0S2luZEdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CkBAIC04NTIsMTQgKzcwOSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1l
bnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsK
IAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
IAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFt
ZU9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQ
UiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwg
YmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIp
OwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKQEAgLTMyOTEsODIgKzMxNDgsNiBAQCB2
b2lkIEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBDYWNoZWFibAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZv
LT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIg
PSBmYWxzZTsKLQotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRy
KTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAg
IG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJ
VEFycmF5TW9kZShhcnJheU1vZGUpOwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRU
eXBlLCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAg
ICAgICAvLyBDdXJyZW50bHksIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZlciBj
b21lcyBoZXJlLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNh
Y2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhU
YXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQ
YXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRh
cmdldCk7Ci0gICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NF
UlQocmVtb3ZlQ29kZVB0clRhZyhtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkgPT0gcmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20sIG1f
ZmFyQ2FsbHMubGFzdCgpLmNhbGxlZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJlY3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
Ci0gICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1
ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5
X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RF
X0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHVi
Um91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0
YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAg
ICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlw
ZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlz
IGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQg
KEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQg
c3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2Rl
KTsKLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwpAQCAtMzQwOCwyMjMgKzMxODksNiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQs
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0S2lu
ZCA9PSBQdXRLaW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0KSB8fCAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09
IG9wX3B1dF9ieV92YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0KLSAgICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQoYnl0ZWNvZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMp
OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVD
YXNlcywgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tz
LmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5
VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxT
aXRlIDogbV9uZWFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsK
LSAgICB9Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsKLSAg
ICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXpl
KHBhdGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwl
cyB3aXRoIGNhY2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJv
cGVydHlOYW1lLnVpZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5k
YXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8tPnN0
dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhKdW1w
VGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xv
d09wZXJhdGlvbiA9IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90SW5k
ZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7
Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhl
ciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9m
ZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4o
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmll
cik7Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJ
ZDxPcFB1dEJ5VmFsRGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5k
LCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5
cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwotICAgIEFTU0VSVChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0
ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAg
IFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2Ny
YXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxz
ZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkg
PSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lz
dGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9
IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAg
IGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5
U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29y
cmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlw
ZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRl
QWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwg
ZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVh
bCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0
T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCkpOwotI2Vsc2UKLSAg
ICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKSk7Ci0jZW5kaWYKLSAgICAK
LSAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92
YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRv
IGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9u
YWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRj
aDIsIGxhdGVTY3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIGlmIChpc0NsYW1wZWQodHlwZSkp
IHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICBBU1NF
UlQoIUpTQzo6aXNTaWduZWQodHlwZSkpOwotICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAg
ICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0
Y2gpOwotICAgICAgICBKdW1wIGNsYW1wZWQgPSBqdW1wKCk7Ci0gICAgICAgIHRvb0JpZy5saW5r
KHRoaXMpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNoKTsK
LSAgICAgICAgY2xhbXBlZC5saW5rKHRoaXMpOwotICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2Fz
ZSAxOgotICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc09uZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAg
ICAgIHN0b3JlMTYoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5
LCBUaW1lc1R3bykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHN0b3Jl
MzIoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0Zv
dXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgIAotICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVy
dHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJl
Z2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
MiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSBy
ZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJ
RCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAg
ICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAg
ZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0
aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFy
cmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1p
dEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNj
cmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIoZWFybHlTY3Jh
dGNoKTsKLSAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwot
ICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIoZWFybHlTY3JhdGNoKSk7Ci0gICAg
YWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9Eb3Vi
bGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vsc2UK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVt
cCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29udmVy
dEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0g
anVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpKTsKLSAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gs
IGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBX
ZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2Vw
dCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xv
YmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVu
dGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVT
Y3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
LSAgICBjYXNlIDQ6Ci0gICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZwUmVn
VDApOwotICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAg
ICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHks
IFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JB
U0goKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggZTgyNjlmZDFl
MTk5ZjE1MjQ4NGViNDRkZGVmMmFhZDE3NzgyMzJmYS4uNjIwZTg0ZjY2NTBlNjE2NmYwNzY4ZGVk
MmZmOTQ4YjM1ODUyNTViOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC00NjYsMTUxICs0NjYsMjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwot
ICAgIAotICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgYWRkU2xv
d0Nhc2Uobm90SW5kZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcHJvZmlsZSwgcmVnVDEpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRv
IHRoaXMgaW5saW5lPwotICAgIGxvYWQ4KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlQW5kTWlzY09mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QxKTsKLSAgICAKLSAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1v
ZGUpIHsKLSAgICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5
VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUp
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRH
ZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCi17
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CisgICAgUHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19zYW1l
X3Y8T3AsIE9wUHV0QnlWYWw+ID8gUHV0S2luZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGlyZWN0
OwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJ
bmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoQ29udGlndW91c1NoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBv
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIAotICAgIExhYmVsIHN0
b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAgICBz
dG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihy
ZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAg
ICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDMpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMy
KHJlZ1QxKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwot
ICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAgICBub3RJbnQubGluayh0aGlzKTsK
LSAgICAgICAgbW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwotICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHku
bGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJl
c3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAg
ICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAK
LSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMSk7Ci0gICAgc3RvcmUzMihy
ZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGVtaXRMb2FkMihiYXNlLCBy
ZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUNSwgcmVnVDQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDYp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CisgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwot
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVn
LCBlY21hTW9kZSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9wdXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChy
ZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7
Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwg
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAv
LyBwYXlsb2FkCi0gICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGlt
ZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7IC8vIHRhZwotICAgIEp1bXAgZW5kID0ganVtcCgpOwot
ICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRy
ZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAg
Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIo
cmVnVDAsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0
aGlzKTsKLSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5l
IGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC02MjAsMTIgKzQ5NywxNSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0
KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0
ZWNvZGUpOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAg
ICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjMzLDIxICs1MTMsMjAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAg
IAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFs
SW5kZXgrK107CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKLSAgICAKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVk
dWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3Qg
aGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVn
VDEpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2Fk
MihiYXNlLCByZWdUMiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
aXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxPcHRpbWl6ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
NSwgcmVnVDQpLCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CiAK
LSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93
UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0
cnVjdGlvbkluZGV4Kys7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUpOworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKaW5kZXggMzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEw
ZmE5ZmQ5OTAzMTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdl
dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKUwogICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQg
cHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0
aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlk
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5k
LCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlk
OiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7Cisg
ICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmlj
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBhdXRvIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
LSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgewor
ICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlW
YWw6IHsKKyAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBw
eQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0
S2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNo
LCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEy
ICs4NTgsMTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9s
ZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUp
KTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAg
ICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpz
dHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApA
QCAtODM1LDEyICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJu
IHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0
ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRC
eUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNh
bXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9
CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBp
ZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBl
KSkgeworICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVp
bnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQz
MlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFy
cmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJp
Z0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNl
LT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1
b3VzU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5
U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0
KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBl
LCBudWxscHRyKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7
CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNl
VmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hl
TGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBp
bmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFN
b2RlIGVjbWFNb2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVw
T25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7
CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0
eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChn
ZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5z
bG90QmFzZSgpID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90
QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCBy
ZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEdldEJ5S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0
QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
QnlLaW5kIGtpbmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0
aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElD
Q2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAg
ICBGdW5jdGlvblR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkK
LSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
KQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZSk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1p
emVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGlt
aXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0Nh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQor
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0
aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAg
ICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0
PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgIH0KIAogICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0
aW1pemVkRnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0
QnlLaW5kOjpCeVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBi
cmVhazsKKyAgICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMz
NjI5ZDhlNi4uZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3Mg
R2V0QnlLaW5kIHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5
S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5k
IHsKICAgICBCeUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5C
eUtpbmQgewogCiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owogdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQg
cmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVl
IGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1v
ZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1Zh
bHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0
Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xv
dCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0
dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29s
IHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlL
aW5kKTsKIHZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0
cnVjdHVyZVN0dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0lu
Zm8mKTsKIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQ
cml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3
NTg3MGU3YjE1Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5
OTAxZmJiYTMwNmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUg
bmFtZXMuIFRoaXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4g
R2V0QnlTdGF0dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUg
aXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8v
IHdoaWNoIHJlZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhl
ZCB3aXRoICJsbGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBh
cmUgZXF1aXZhbGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436294</attachid>
            <date>2021-08-24 09:18:20 -0700</date>
            <delta_ts>2021-08-24 09:46:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210824091819.patch</filename>
            <type>text/plain</type>
            <size>331727</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi43OTZjOGUyNDk5ZjgxNGQx
NmZhMGRmZmQzMTliMzBjYzI1MzkwNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDEgQEAKKzIwMjEtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OlB1dEJ5U3RhdHVzKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29t
cHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFw
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1
dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQ
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4
aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1
cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rp
b24pOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAq
IGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpkaXJlY3RQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjpkaXJlY3RQdXRCeVZhbE9wdGltaXplKToKKyAgICAgICAgKEpTQzo6
dHJ5UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRyeURpcmVjdFB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRp
Z3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJ
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaDoKKwog
MjAyMS0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCBzaG91bGQgbm90IGxvYWQgaW5k
ZXhpbmdUeXBlIHVubmVjZXNzYXJpbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YWRkNmNiNDMyMjkyN2YyMjE1YTYzMmQzODkzYmRjOWMzODI1ZmE3YS4uMzIzZDhhNDBlMWY2ZTIz
ZmNlMjdlZDdjMDhkYjUzMjQ3M2IyNmE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQ2NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUUxNENBN0RD
NTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk2MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTNC
NEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8q
IFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNp
dFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBD
MzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAw
NTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsMTEgKzI4NjYsMTEgQEAKIAkJMEY5MzMyOTQxNENB
N0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRCeVN0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJ
ZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlk
U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOUExNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
MzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1
dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTgx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFy
aWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVZhcmlhbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8q
IFZpc2l0UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
aXNpdFJhY2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFBMDFE
Rjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODY5NSwxMCArODY5NSwxMCBAQAogCQkJCTBGRDNF
NDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGMTVD
RDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwICovLAogCQkJCTBGMTVDRDIx
MUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzQjRBNzE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
VmFyaWFudC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFy
aWFudC5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8s
CiAJCQkJMEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuY3BwICov
LAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8s
CkBAIC0xMDUwNiw4ICsxMDUwNiw4IEBACiAJCQkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8q
IFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcy
RDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFG
RkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTNCNEFB
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFBy
b3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5k
ZXggYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uNzA3N2VmOWFlMzEx
NzZmNjM4NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dApAQCAtMjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiBieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2Uu
Y3BwCiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAotYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAK
K2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3Bw
CiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCmluZGV4IGZhOGI2YjIyZTNhNGUyZGM5NTBjN2JiMjQ2OTdlNjk4MjgwYzM1YjYuLjJjY2Qz
NTYzODMwNDlkNzhmYzI2OWJmMDU1YjJjMjExNmU0N2NiYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTk5LDYgKzk5LDE5IEBAIFJlZjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIENhY2hlCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4
ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNh
c2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghcHJvdG90eXBlQWNjZXNzQ2hhaW4pOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgpAQCAtMjcyLDYgKzI4NSwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6Omd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrU2tpcHBpbmdDb25zdGFudElkZW50aWZpZXJDaGVjaygpIGNvbnN0
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjYsNiArMzUyLDE5IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJZGVudGlmaWVyTmFtZU1hdGNoKCkgY29uc3QKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM3OCw2ICs0MTcsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjaygpIGNvbnN0CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xh
bXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyNSwxMSArNDc3LDI0IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6bmVlZHNTY3JhdGNoRlBSKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxv
YWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtNTE1LDYgKzU4MCwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmZvckVh
Y2hEZXBlbmRlbnRDZWxsKFZNJiB2bSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdl
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAg
LTU2OSw2ICs2NDcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoVk0mIHZtLCBWZWN0
b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrSWZEb2VzQ2FsbHMpIGNvbnMKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGRvZXNDYWxscyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFJlcGxhY2U6CkBAIC02NTAsNiArNzQxLDE5IEBAIGJvb2wgQWNjZXNzQ2Fz
ZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBvdGhlci50eXBlKCkgPT0gdHlwZSgp
OwogCiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7CkBAIC05NjEsNiArMTA2NSw4IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQ
Uik7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xMDYwLDYgKzExNjYsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTEx
NDUsNiArMTI1Myw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtMTE5OSwxNSArMTMwOSwxNCBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBpc091dE9mQm91bmRzOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNF
bXB0eTsKLQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJ
bmZvLnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNl
UmVncygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2Fy
cmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhz
Y3JhdGNoR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xMjI3LDE2ICsxMzM2
LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIp
KTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0
Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gz
R1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1w
dHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hH
UFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRj
aDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKQEAgLTEyNjIsMjEgKzEzNzEsMjEg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgICAgIHByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgICAg
ICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIHN0YXRlLnNjcmF0Y2hGUFIp
OwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRj
aEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElm
TmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAgICAgICAgICBqaXQuYm94RG91YmxlKHN0
YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Vp
Z2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkg
PSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxz
ZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFs
dWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgaXNFbXB0
eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBmYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUikpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkp
OwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzk1LDI3MyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwog
Ci0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHko
KSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworICAgICAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVu
ZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
OiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBp
cyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ug
b3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnBy
b3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNoZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMg
YWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUp
KSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
YWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9OworCisg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmIChtX3R5
cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisgICAg
ICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vsc2UK
KyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKworICAgICAgICAgICAgc3RvcmVSZXN1
bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAg
ICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBzdG9y
ZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7Cisg
ICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBq
aXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3Rh
dGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBlbWl0
dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAo
bV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgewogICAgICAgICAgICAgaXNPdXRP
ZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkpOworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5z
dWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5m
by5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZk1h
eVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBqaXQuanVt
cCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFuZElnbm9yZS5lbXB0eSgp
KSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0
YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5k
KGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgLy8gVGhpcyBj
b2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUg
YmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRv
VHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBz
dGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHR5cGVGb3JU
eXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2
YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0
eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IElu
dmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElm
Tm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
IGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZq
aXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwor
ICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0Rv
dWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOwor
I2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgLy8gT3V0T2ZC
b3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIGZ1
bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOwor
CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNl
ZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkp
OworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0
dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hH
UFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBzY3JhdGNoM0dQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdl
Q29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQz
MlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUp
KSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCgh
SlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gaW5Cb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIHNjcmF0Y2gzR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgYXV0
byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwgc2NyYXRj
aDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAg
ICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZq
aXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJH
UFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGlt
ZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAg
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0
KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisg
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJl
c2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygp
KTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykK
ICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAg
ICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIAogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xODk0
LDggKzIyNjIsMTIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7Cisg
ICAgICAgIGlmIChzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSkKKyAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
c3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVBy
b2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRj
aEdQUik7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKQEAg
LTIwNTgsNiArMjQzMCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwog
ICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAg
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAg
IGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAg
ICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5k
OjpQcm9wZXJ0eURlbGV0aW9uKTsKQEAgLTIxODMsNiArMjU1NywxOSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1
b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0
ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKICAgICAgICAgLy8g
YWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUo
KSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAgICAgICAvLyBhcmUgbm90IGd1YXJk
ZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIgKzI1ODMsMzEgQEAgVHlwZWRBcnJh
eVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CiAgICAgICAg
IHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlw
ZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKICAgICAgICAgcmV0dXJu
IFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDE2
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MzI7CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyODQsNiArMjY4MCwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vzc0Nhc2UmIGxocywgY29uc3QgQWNj
ZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAg
ICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNlIEluc3RhbmNlT2ZHZW5lcmljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0YTk2MjExMDUwODk5YmFkZmQ5YmUu
LjU2M2ExNTUyYWU0MjE2NDQwNDZkMGFhNDFkMjNiNmFkZDVkYjY1NTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMTI4LDcgKzEyOCwyMCBAQCBj
bGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFjY2Vzc0Nhc2U+
IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkLAogICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAgICAgICBJbmRleGVkU3RyaW5nTG9h
ZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWREb3VibGVTdG9y
ZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwKKyAgICAgICAgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSwKKyAgICAg
ICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUs
CisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUsCisgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAKICAgICBlbnVtIFN0YXRlIDogdWlu
dDhfdCB7CkBAIC0zNTMsMTIgKzM2NiwxMyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAg
ICAgICAgc3RydWN0IEtleSB7CiAgICAgICAgICAgICBLZXkoKSA9IGRlZmF1bHQ7CiAKLSAgICAg
ICAgICAgIEtleShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgZXh0cmFH
UFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgUG9seW1v
cnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkKKyAgICAgICAgICAgIEtleShHUFJS
ZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgZXh0cmFHUFIsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cywgUG9seW1vcnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkKICAgICAgICAgICAg
ICAgICA6IG1fd3JhcHBlZCh3cmFwcGVkKQogICAgICAgICAgICAgICAgICwgbV9iYXNlR1BSKGJh
c2VHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3ZhbHVlR1BSKHZhbHVlR1BSKQogICAgICAgICAg
ICAgICAgICwgbV9leHRyYUdQUihleHRyYUdQUikKICAgICAgICAgICAgICAgICAsIG1fc3R1Yklu
Zm9HUFIoc3R1YkluZm9HUFIpCisgICAgICAgICAgICAgICAgLCBtX2FycmF5UHJvZmlsZUdQUihh
cnJheVByb2ZpbGVHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJl
Z2lzdGVycykKICAgICAgICAgICAgIHsgfQogCkBAIC0zNzUsNiArMzg5LDcgQEAgY2xhc3MgU2hh
cmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAgICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBi
Lm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9l
eHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0
dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAgICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0g
Yi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lz
dGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgICAgIH0KIApAQCAtMzgzLDYgKzM5
OCw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgR1BSUmVnIG1fdmFs
dWVHUFI7CiAgICAgICAgICAgICBHUFJSZWcgbV9leHRyYUdQUjsKICAgICAgICAgICAgIEdQUlJl
ZyBtX3N0dWJJbmZvR1BSOworICAgICAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9maWxlR1BSOwog
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgICAgICB9OwogCkBA
IC00MTYsNiArNDMyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAg
ICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAg
ICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAm
JiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAg
ICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAg
ICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVycykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yZGVyaW5nIG9mIGNhc2VzIGRvZXMg
bm90IG1hdHRlciBmb3Igc2hhcmluZyBjYXBhYmlsaXRpZXMuCiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSBzdWNjZXNzIHJhdGUgYnkgbWFraW5nIHRo
aXMgY29tcGFyaXNvbiAvIGhhc2hpbmcgbm9uIG9yZGVyaW5nIHNlbnNpdGl2ZS4KQEAgLTQ0NSw2
ICs0NjIsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgR1BSUmVnIG1fdmFs
dWVHUFI7CiAgICAgICAgIEdQUlJlZyBtX2V4dHJhR1BSOwogICAgICAgICBHUFJSZWcgbV9zdHVi
SW5mb0dQUjsKKyAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9maWxlR1BSOwogICAgICAgICBSZWdp
c3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIGNvbnN0IEZpeGVkVmVjdG9yPFJlZlB0
cjxBY2Nlc3NDYXNlPj4mIG1fY2FzZXM7CiAgICAgICAgIGNvbnN0IEZpeGVkVmVjdG9yPFN0cnVj
dHVyZUlEPiYgbV93ZWFrU3RydWN0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BcnJheVByb2ZpbGUuaAppbmRleCA2ZGM3YjBlNTQ0N2ZlMDYwZGJjYmQyNGQ5OTA5NzU2
NTc5ZmM2NTc0Li45MWRhOGYzZWZmOTJmYzNhODk1NzBkNzVhNGI5MTNiZDI2MzJjYzRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCkBAIC0yMDgs
NiArMjA4LDkgQEAgY2xhc3MgQXJyYXlQcm9maWxlIHsKICAgICBBcnJheU1vZGVzKiBhZGRyZXNz
T2ZBcnJheU1vZGVzKCkgeyByZXR1cm4gJm1fb2JzZXJ2ZWRBcnJheU1vZGVzOyB9CiAgICAgYm9v
bCogYWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiAmbV9tYXlTdG9yZVRvSG9sZTsg
fQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5UHJvZmlsZSwgbV9tYXlTdG9yZVRvSG9sZSk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCk7IH0K
KwogICAgIHZvaWQgc2V0T3V0T2ZCb3VuZHMoKSB7IG1fb3V0T2ZCb3VuZHMgPSB0cnVlOyB9CiAg
ICAgYm9vbCogYWRkcmVzc09mT3V0T2ZCb3VuZHMoKSB7IHJldHVybiAmbV9vdXRPZkJvdW5kczsg
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCmluZGV4IDc2NzFkODdiMWVhNzQ5ZGMzNDU2Zjc3NjVh
YzA2YzRhOGJjZmIyYjEuLmMwMjVhN2JmNjUxOTRiZGE0ZTgyMTUxZDljYjNmMjk2NzhkYTkyNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5jcHAKQEAgLTE0MSw2ICsxNDEsOCBAQCB2b2lkIEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSwgY29ucwogICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgaWYgKHN0dWJJbmZv
Lm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSKTsKICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKIAogICAg
IEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAppbmRleCBmYTBhNmQ1MjNiN2FkMGRmODgyMTEw
N2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAyNTk2YmY2ZWE4ZmY5YThhNzJiNGRjMmExZDE4
OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNN
YXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaApA
QCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlua1N0YXR1czsKIGNsYXNzIENvZGVCbG9jazsK
IGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5CeVN0YXR1czsKLWNsYXNzIFB1dEJ5SWRTdGF0
dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNzIERlbGV0ZUJ5U3RhdHVzOwogY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJbmZvOwpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1
Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsU3RhdHVzIHsgbnVsbHB0ciB9
OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAgSW5CeVN0YXR1
cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAgUHV0QnlJZFN0YXR1cyogcHV0U3RhdHVzIHsg
bnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAg
RGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7IG51bGxwdHIgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKaW5kZXggNDg0MTAx
MzlkYzJmOGMwZDVjODBhMmZmOTA1YzNhYTZhMTM1ZGZiMi4uYzFlYjJkNjlkMjc1NGUwNTFhODI1
OWY2Mzc3ZTY0NzE0ZWVhZWU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAKQEAgLTIxNiw4ICsyMTYsMTIgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3RlcihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCiAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVRhZ0dQUik7CiAgICAgYWxsb2Nh
dG9yLmxvY2soc3R1YkluZm8udmFsdWVUYWdHUFIpOwogI2VuZGlmCisgICAgaWYgKHN0dWJJbmZv
LnByb3BlcnR5UmVncygpKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0
eVJlZ3MoKSk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJl
ZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAg
aWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBHUFJSZWcg
c2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBpZiAoYWxsb2Nh
dG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAKaW5kZXggODEwNGEyZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDBk
NmExZjlkYTU4MjUyMDU1NGFhYzM0ZWMxYTQ0ZTQyOWFmODY0MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC00OTQs
NiArNDk0LDggQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVn
ZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICNlbmRpZgogICAgIGlmIChzdHVi
SW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5m
by5tX2FycmF5UHJvZmlsZUdQUik7CiAKICAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC04MTAsNiArODEyLDcgQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25j
dXJyZW50SlNMb2MKICAgICAgICAgICAgIHN0dWJJbmZvLnZhbHVlR1BSLAogICAgICAgICAgICAg
c3R1YkluZm8ucmVncy50aGlzR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ubV9zdHViSW5mb0dQ
UiwKKyAgICAgICAgICAgIHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLAogICAgICAgICAgICAg
c3R1YkluZm8udXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgIGtleXMsCiAgICAgICAgICAgICB3
ZWFrU3RydWN0dXJlcywKQEAgLTg0Niw3ICs4NDksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
YwogCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgaWYgKGNhbkJl
U2hhcmVkKQotICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJlZEpJVFN0
dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQUiwgc3R1
YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5mby51c2Vk
UmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CisgICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJz
LT5hZGQoU2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJ
bmZvLnZhbHVlR1BSLCBzdHViSW5mby5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsIHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBz
dHViLmdldCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZpbmlzaENvZGVHZW5lcmF0aW9uKFdU
Rk1vdmUoc3R1YikpOwpAQCAtMTAyMiw2ICsxMDI1LDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
U3RyaW5nTG9hZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRl
eGVkSW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAg
IG91dC5wcmludCgiSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQu
cHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFj
OTBjMWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3Rh
dHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVz
OjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1Q
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAg
ICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29t
cHV0ZUZyb21MTEludGAgaW4gYW55IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAg
Ly8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVy
ZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMg
b3BlcmF0aW9uIG9uIExMSW50LgotICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJp
dmF0ZU5hbWU+KCkpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxl
ZEJsb2NrKTsKLQotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRT
dHJ1Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1
Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAg
aWYgKCFuZXdTdHJ1Y3R1cmVJRCkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0
cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0g
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVj
b2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0
cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0
dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJM
RShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
LSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlk
RXhpdCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1
dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywg
dWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURf
UEFSQU0obWFwKTsKLSAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJl
dHVybiBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywg
c3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHVi
SW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVk
QmxvY2stPnZtKCksIHN0dWJJbmZvKTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNo
IChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0g
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxl
ZCBmb3Igc29tZSByZWFzb24uCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2U6IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAg
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBs
ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+
YXQoaSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAg
ICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vz
c0Nhc2U6OlJlcGxhY2U6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2
YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlv
bjogewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAg
ICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBs
ZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpj
YWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2Fs
bEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVy
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9m
ZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAg
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2Nr
LCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0
U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsK
LSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEg
PSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRl
Y29kZUluZGV4KTsKLSAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShi
YXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0
KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNv
bnRleHQtPmdldChjb2RlT3JpZ2luKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBb
Jl0gKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAg
ICAgICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwg
dWlkLCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAg
ICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5zbG93VmVyc2lvbigpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0
YXR1cy5zdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxl
c3MocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRT
dGF0dXMpCi0gICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1h
cCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0g
U2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgp
ICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAg
IGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZh
bGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUg
bW9kZQotICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBw
cml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAg
IC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKLSAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgotICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBo
YXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAg
ICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVz
ZSBpdCBtZWFucyB3ZSBhcmUKLSAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGlu
c3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBw
YXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAg
IGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBp
cyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhp
cyBpcyByZWFsbHkKLSAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBj
aGVja3MuCi0gICAgCi0gICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBk
aWN0aW9uYXJpZXMuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsK
LSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAot
ICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1
cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNl
dCk7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAKLSAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFu
dCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAg
ICAgaWYgKCFkaWRBcHBlbmQpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2Fs
bHMoKSBjb25zdAotewotICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Ns
b3dQYXRoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0
YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUo
Vk0mIHZtKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KSB7Ci0gICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0
dXM6Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5t
X3N0YXRlID09IE5vSW5mb3JtYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRv
IG1lcmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93
UGF0aCk7Ci0gICAgfTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5v
SW5mb3JtYXRpb246Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNp
bXBsZSkKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewot
ICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2Fz
ZSBNYWtlc0NhbGxzOgotICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9
IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92
YXJpYW50cywgc2V0KTsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJp
YW50cykKLSAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnko
KTsKLSAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0lu
Zm9ybWF0aW9uOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRp
b246Ci0gICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxp
c3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
IGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnBy
aW50KCIoTWFrZXNDYWxscykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBj
YWU2MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1
cy5oIgotI2luY2x1ZGUgIkV4aXRGbGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNp
bmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQu
aCIKLSNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENvZGVCbG9jazsKLWNsYXNzIFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBT
dHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1
cyBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51
bSBTdGF0ZSB7Ci0gICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1h
dGlvbi4KLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMg
YSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8v
IEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1Bh
dGgsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMu
Ci0gICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQot
ICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwg
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAg
fQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZv
cm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1h
cnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0g
ICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICAKLSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAg
ICAgICA6IG1fc3RhdGUoU2ltcGxlKQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQo
dmFyaWFudCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAg
c3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZh
dGVGaWVsZFB1dEtpbmQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElD
U3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOwotI2VuZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUg
PT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5
SWRTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3Rv
cjxQdXRCeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50
czsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQ
dXRCeUlkU3RhdHVzJik7Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2
YXRlOgotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSAgICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0
QnlJZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUg
bV9zdGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0
ZDY0NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2Fs
bExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKLSAgICA6IFB1dEJ5SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwot
fQotCi1QdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRC
eUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29u
ZGl0aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVl
PENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnRyYW5zaXRpb24oCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUo
KSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1f
a2luZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQot
Ym9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0
ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25z
dAotewotICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAg
ICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90
aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFy
aWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAg
ICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAg
ICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBp
ZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0
aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAg
IGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQg
PSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYg
KG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKSB7Ci0gICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2Fs
bExpbmtTdGF0dXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5t
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25T
ZXQ7Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1f
Y29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFs
aWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0
aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCi0gICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIu
bV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJn
ZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQot
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9r
aW5kID09IFRyYW5zaXRpb24pOwotICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNl
KTsKLSAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJU
KCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxs
b2NhdGVzU3RvcmFnZSgpKTsKLSAgICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpOwotICAgIAotICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hl
biB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAot
ICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdh
cyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdl
IG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBv
bHltb3JwaGljLgotICAgIAotICAgIGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlT
dHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUu
bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBt
X25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQg
UHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBs
YXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3Ry
dWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
dm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYg
IW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAg
ICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiB0byAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAot
ICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwg
Il0iKTsKLSAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAg
ICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91
dC5wcmludCgiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhNzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2Fi
MjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwot
Ci1jbGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZW51bSBLaW5kIHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNl
LAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAg
IFB1dEJ5SWRWYXJpYW50KCkKLSAgICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1f
b2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJp
YW50Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFu
dCYpOwotCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0
cmFuc2l0aW9uKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4pOwotICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
IT0gTm90U2V0OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQo
KTsgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0g
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsK
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1
Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVj
ZXNzYXJ5KCk7Ci0KLSAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29s
IHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OwotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRv
bid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYg
d2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRy
aW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8v
IFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVy
dHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlu
a1N0YXR1cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7
Ci0gICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJv
b2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
LSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90
aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVy
LnN0cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7
Ci0gICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0g
ICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1
Y3R1cmUgeyBudWxscHRyIH07Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25k
aXRpb25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5r
U3RhdHVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTQ2NzljNGIwMjQ3Njg2
NjE4M2ViZTc4NzU2ZmI0ODg1ODBlNTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDU0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdl
dFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRl
ICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5U3Rh
dHVzOjpQdXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAgIGNhc2UgU3R1Yklu
Zm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlv
bjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6Cisg
ICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0dWJJbmZvU3Vt
bWFyeTo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93
UGF0aCA/IE9ic2VydmVkVGFrZXNTbG93UGF0aCA6IExpa2VseVRha2VzU2xvd1BhdGg7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1h
a2VzQ2FsbHM6CisgICAgICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNl
cnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE1ha2VzQ2FsbHM7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBQdXRC
eVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQpCit7Cisg
ICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKK30K
Kwordm9pZCBQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fdmFyaWFudHMuc2hy
aW5rVG9GaXQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Cit7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKKyAgICAKKyAgICBhdXRvIGlu
c3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgor
ICAgICAgICAvLyBXZSBkbyBubyBoYXZlIGEgY29kZSByZXRyaWV2aW5nIExMSW50IGluZm9ybWF0
aW9uIGZvciBgb3BfcHV0X3ByaXZhdGVfbmFtZWAuCisgICAgICAgIC8vIFdlIGNhbiBhZGQgc3Vw
cG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ug
d2UgaGF2ZQorICAgICAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24g
TExJbnQuCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBk
ZWZhdWx0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KHByb2ZpbGVkQmxvY2spOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSAmKHBy
b2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7CisKKyAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CisgICAgaWYgKCFzdHJ1
Y3R1cmVJRCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAg
IAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KHN0cnVjdHVyZUlEKTsKKworICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0
YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAg
fQorCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOworICAgIAorICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkg
eworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBw
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQorICAgIAorICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6
OnRyYW5zaXRpb24obnVsbHB0ciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgb2Zmc2V0KTsKK30KKworI2lmIEVOQUJMRShKSVQpCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBVTlVTRURf
UEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkaWRFeGl0KQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5m
bzsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAg
IGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJs
b2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8g
RU5BQkxFKEpJVCkKKyAgICBVTlVTRURfUEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0oZGlk
RXhpdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOworICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIHJldHVybiBj
b21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1Yklu
Zm8sCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5l
QmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7Cisg
ICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShw
cm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7CisgICAgaWYgKCFpc0lubGluZWFibGUoc3Vt
bWFyeSkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhzdW1tYXJ5LCAqc3R1YkluZm8pOwor
ICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7CisgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRv
IGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgCisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQorICAgICAgICAg
ICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAg
ICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7
CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZv
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nl
c3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRC
eVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBvZmZzZXQp
OworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0
aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNz
LmlkZW50aWZpZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCks
IGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1
czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgYWNjZXNzLnVp
ZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhH
ZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Ns
b3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4o
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
YWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFy
aWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVy
ZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25T
ZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZv
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnNo
cmlua1RvRml0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2Vs
aW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxs
RXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxp
bmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENh
Y2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElD
U3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1
cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBh
dXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1
cyB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewor
ICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigK
KyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2Rl
SW5kZXgsIGRpZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwor
ICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAg
ICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0
YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJl
c3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVz
KQorICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5
dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1
cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBi
b29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYg
KHBhcnNlSW5kZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKworICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoKTsKKyAgICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
UHV0QnlTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zm
c2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisg
ICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUg
ZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xv
dyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQ
dXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExp
a2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Ns
b3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFj
ZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3Jl
YXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KKyAgICAgICAg
ICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1
dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAgICAgICAgICAgLy8gZ29pbmcg
b24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJv
bSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4g
aWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3ku
CisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtl
IHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2
YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4gaGF2
ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0CisgICAg
ICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1c2Ug
aXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0
YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNsb3cgcGF0
aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAgICAgICBp
ZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lz
IGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0
aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5
IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9u
IGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAg
ICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBp
c24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qg
d2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAg
ICAgICB9CisgICAgCisgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUs
IHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQo
aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSBy
ZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwg
c3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBp
ZiAoIWRpZEFwcGVuZCkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0LnNocmlua1RvRml0KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxz
KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRp
b246CisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgT2JzZXJ2ZWRUYWtl
c1Nsb3dQYXRoOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNYWtlc0NhbGxzOgor
ICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgU2ltcGxlOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtl
c0NhbGxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3Rh
dHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKG9ic2VydmVkU3RydWN0dXJlU3R1
YkluZm9TbG93UGF0aCgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygp
ID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBPYnNlcnZlZFRha2VzU2xvd1BhdGgp
OworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogTGlr
ZWx5VGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJZGVudGlmaWVy
Rm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAg
IHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
dXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1
dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQubWFya0lm
Q2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNo
ZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZpbmFsaXplKFZN
JiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsK
KyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6Om1l
cmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIubV9zdGF0ZSA9
PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG1lcmdlU2xvdyA9
IFsmXSAoKSB7CisgICAgICAgIGlmIChvYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgo
KSB8fCBvdGhlci5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAgICAg
ICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxz
KCkpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBPYnNlcnZlZFRha2VzU2xvd1Bh
dGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKyAgICB9OworCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBO
b0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAg
ICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAg
Y2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIG1lcmdl
U2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7
CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVy
SUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOworICAgIGZvciAoUHV0QnlWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9S
ZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgi
KCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIkxpa2VseVRha2VzU2xv
d1BhdGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRo
OgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkVGFrZXNTbG93UGF0aCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIk1ha2VzQ2Fs
bHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2Vz
Q2FsbHM6CisgICAgICAgIG91dC5wcmludCgiT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0NjhhMjg2ZWI1ZmI3
MWY5MTdiODA4NGNjZGNhMGY0YTIyOGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhpdEZsYWcuaCIK
KyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQu
aCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnku
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFZNOworY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1Y3R1cmVDaGFp
bjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdp
biwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5m
b01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJdCdzIHVuY2Fj
aGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3JtYXRpb24sCisg
ICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAg
ICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtlIHRoZSBzbG93IHBh
dGguCisgICAgICAgIExpa2VseVRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mga25vd24g
dG8gdGFrZSBzbG93IHBhdGguIFdlIGFsc28gb2JzZXJ2ZWQgdGhhdCB0aGUgc2xvdyBwYXRoIHdh
cyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgT2JzZXJ2ZWRUYWtlc1Nsb3dQ
YXRoLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtlIHRoZSBzbG93IHBhdGggYW5kIHdp
bGwgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscywKKyAgICAgICAgLy8gSXQga25vd24g
dG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuIFdlIGFsc28gb2JzZXJ2ZWQgdGhhdCB0aGUg
c2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgT2JzZXJ2
ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMsCisgICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygp
CisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKKyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgc3dpdGNoIChtX3N0YXRl
KSB7CisgICAgICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgY2FzZSBMaWtlbHlUYWtl
c1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICAgICAg
Y2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0Nh
bGxzOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdHViSW5m
b1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAg
IHsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwg
Qnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwor
ICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
U3RydWN0dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0
ZUZpZWxkUHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3Rh
dHVzQ29udGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVP
cmlnaW4pOworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
IT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBjYXNlIExpa2Vs
eVRha2VzU2xvd1BhdGg6CisgICAgICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7
CisgICAgUHV0QnlTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKKyAgICBib29sIG9ic2VydmVk
U3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gT2Jz
ZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2Vz
Q2FsbHM7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQsIDE+JiB2
YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRCeVZh
cmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07
IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNpbmdsZUlk
ZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
KyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBQdXRC
eVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1Yklu
Zm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwor
ICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICB2
b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8
UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIwN2M1MzViMzc0MDQ4MTA5ZTY5YzkwYWQ4YzlhOWZmMjk0ODdjMjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNw
cApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlh
bnQuaCIKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworUHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50
JiBvdGhlcikKKyAgICA6IFB1dEJ5VmFyaWFudChvdGhlci5tX2lkZW50aWZpZXIpCit7CisgICAg
KnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlWYXJpYW50JiBQdXRCeVZhcmlhbnQ6Om9wZXJhdG9y
PShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIG1fa2luZCA9IG90aGVyLm1fa2lu
ZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOworICAgIG1fbmV3
U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CisgICAgbV9jb25kaXRpb25TZXQgPSBv
dGhlci5tX2NvbmRpdGlvblNldDsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAg
IGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0g
bWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAg
IGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgbV9pZGVudGlm
aWVyID0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIHJldHVybiAqdGhpczsKK30KKworUHV0QnlW
YXJpYW50IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICBy
ZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeVZhcmlhbnQg
cmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0
aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpzZXR0ZXIoQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7
CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owor
ICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1
cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0
cnVjdHVyZSogUHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWduZWQg
aSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1f
bmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFB1dEJ5VmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkK
K3sKKyAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1
Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBtX2tpbmQgPSBSZXBsYWNlOwor
ICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50
Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAg
IGNhc2UgVHJhbnNpdGlvbjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQ
dXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4ga2luZCgp
ID09IFNldHRlcjsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEhb3Ro
ZXIubV9pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9pZGVu
dGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgTm90
U2V0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKG90aGVy
Lm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0
aW9uOiB7CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOworICAg
ICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxh
Y2UoKnRoaXMpKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBUcmFuc2l0aW9uOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBj
YXNlIFJlcGxhY2U6CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9u
V2l0aFJlcGxhY2Uob3RoZXIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjogeworICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0
dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtZXJnZWRDb25k
aXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0
dGVyOiB7CisgICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwg
b3RoZXIubV9jYWxsTGlua1N0YXR1cykgeworICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0
YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQu
bWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIW1lcmdl
ZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90
QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAg
CisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICAgICAgbV9jYWxsTGlua1N0
YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICAKKyAgICAgICAg
bV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSkKK3sK
KyAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOworICAgIEFTU0VSVChyZXBsYWNlLm1f
a2luZCA9PSBSZXBsYWNlKTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNl
dCk7CisgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7CisgICAgQVNTRVJU
KCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAgICBBU1NFUlQocmVwbGFjZS5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5n
IG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5l
dyBmaWVsZCB3aGljaAorICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRo
ZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKKyAg
ICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVw
bGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgorICAgIAorICAgIGlmIChyZWFsbG9jYXRlc1N0b3Jh
Z2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXBsYWNlLm1fb2xk
U3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoUHV0QnlWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChtX25ld1N0
cnVjdHVyZSkKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwor
fQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCit7CisgICAg
aWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3U3Ry
dWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRpb25TZXQu
YXJlU3RpbGxMaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2NhbGxM
aW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVs
bHB0cik7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPCIp
OworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciwgIicsICIpOworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiZW1wdHk+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOgorICAgICAg
ICBvdXQucHJpbnQoCisgICAgICAgICAgICAiUmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBvdXQu
cHJpbnQoCisgICAgICAgICAgICAiVHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiB0byAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQo
bmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dCht
X2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwg
Ij4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldHRlcjoKKyAgICAg
ICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25T
ZXQsIGNvbnRleHQpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVz
KTsKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZh
cmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MTQwMmI0MjU2YWRlN2UwNTY1MGE5ZmYwZjY4NDVlYzFiMzFlYjRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua1N0YXR1
czsKKworY2xhc3MgUHV0QnlWYXJpYW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBOb3RTZXQsCisgICAgICAgIFJlcGxh
Y2UsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNldHRlcgorICAgIH07CisgICAgCisg
ICAgUHV0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICAgICAg
OiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAg
ICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX2lkZW50aWZpZXIoV1RG
TW92ZShpZGVudGlmaWVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1dEJ5VmFyaWFudChj
b25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQ
dXRCeVZhcmlhbnQmKTsKKworICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgcmVwbGFjZShDYWNoZWFi
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAg
CisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCB0cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCBzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmllciwg
Y29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CisgICAgCisg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBr
aW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wgd3JpdGVz
U3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7
CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0
aW9uU2V0OyB9CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBT
ZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9y
IHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJl
dHVybiBOb0ludHJpbnNpYzsgfQorCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRl
ZCBoZWxwZXJzLgorICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAg
CisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtT
dGF0dXMuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRC
eVZhcmlhbnQmIG90aGVyKTsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
KyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQdXRC
eVZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEh
b3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
IChtX2lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIu
bV9pZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlv
bldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSk7CisgICAgCisgICAgS2lu
ZCBtX2tpbmQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgU3RydWN0dXJlU2V0
IG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRy
IH07CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOworICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5jcHAKaW5kZXggMGM0YzA3NDdhMGFiODVmYjNhZjgxN2QyOTQ1ZDYyMWFkYzNlYmFkNy4uZmNl
MGY0ZDhlZTEwZWRkYmNmM2M3NTRlZjgzM2EzNWJlOTdkYmMxOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcApAQCAtNjIsMTAg
KzYyLDEwIEBAIEdldEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRHZXRCeVN0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
ICAgICAKLVB1dEJ5SWRTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5SWRTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlJZFN0YXR1cyYgc3RhdHVz
KQorUHV0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5U3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5U3RhdHVzJiBzdGF0dXMpCiB7Ci0gICAg
YXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5SWRTdGF0dXM+KHN0YXR1cyk7Ci0gICAg
UHV0QnlJZFN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOworICAgIGF1dG8gc3RhdHVz
UHRyID0gbWFrZVVuaXF1ZTxQdXRCeVN0YXR1cz4oc3RhdHVzKTsKKyAgICBQdXRCeVN0YXR1cyog
cmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOwogICAgIHB1dHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGNvZGVPcmlnaW4sIFdURk1vdmUoc3RhdHVzUHRyKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0
ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQog
ICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgZm9yIChh
dXRvJiBwYWlyIDogcHV0cykKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykKICAgICAgICAgcGFpci5zZWNvbmQt
PnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0ZXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMu
aAppbmRleCBiZDE1NzA1NDU3MzgwYzM3N2I4NDI4NmQ1M2FhODY4YTMyNjMyNGI1Li45NDk4M2Ri
Yzc2N2QwN2UyODA0YmQ0NDJjMzdlYjU0Y2Y0NTdiYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpbmNsdWRlICJEZWxldGVCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAj
aW5jbHVkZSAiSW5CeVN0YXR1cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVz
ZXMgewogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBhZGRDYWxsTGlua1N0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgQ2FsbExpbmtTdGF0dXMmKTsKICAgICBHZXRCeVN0YXR1cyogYWRk
R2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEdldEJ5U3RhdHVzJik7Ci0gICAg
UHV0QnlJZFN0YXR1cyogYWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
UHV0QnlJZFN0YXR1cyYpOworICAgIFB1dEJ5U3RhdHVzKiBhZGRQdXRCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgUHV0QnlTdGF0dXMmKTsKICAgICBJbkJ5U3RhdHVzKiBhZGRJbkJ5
U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5U3RhdHVzJik7CiAgICAgRGVsZXRl
QnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBEZWxl
dGVCeVN0YXR1cyYpOwogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1ByaXZh
dGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMmKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAg
IAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPj4+IGNhbGxzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPEdldEJ5U3RhdHVzPj4+IGdldHM7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxD
b2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlJZFN0YXR1cz4+PiBwdXRzOworICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5U3RhdHVzPj4+
IHB1dHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
SW5CeVN0YXR1cz4+PiBpbnM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6
OnVuaXF1ZV9wdHI8RGVsZXRlQnlTdGF0dXM+Pj4gZGVsZXRlczsKICAgICBWZWN0b3I8c3RkOjpw
YWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDaGVja1ByaXZhdGVCcmFuZFN0YXR1cz4+
PiBjaGVja1ByaXZhdGVCcmFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA3NTkxOGY2NzczMTgzY2RmY2ViMjNk
YzNjYzIxZDMyN2U5ZmExODY4Li5mMjdiNzM3NGVmOWFlZTEwN2E3MDE2ZGE4ODFiY2VkZjc4MTlk
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAKQEAgLTI4MSw4ICsyODEsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6cmVzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sq
IGMKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAgICByZXNldEdl
dEJ5KGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKLSAgICAgICAgcmVzZXRQdXRCeUlEKGNv
ZGVCbG9jaywgKnRoaXMpOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAg
cmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICByZXNldFB1dEJ5
KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKICAgICAgICAgcmVzZXRJbkJ5KGNvZGVCbG9jaywg
KnRoaXMsIEluQnlLaW5kOjpCeUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggNzMwNGZiMTU0ZTg0MGQ4NWRhMjhlNmUy
NTAxYWFiMThlNTVkNDFhNC4uZTY3YmMxMDhiZTMyMGRkNmQyNTllNzdjODFiOWQ1MWM0NWNmNTg0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKQEAgLTU0LDcgKzU0LDggQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90
IHsKICAgICBHZXRCeUlkRGlyZWN0LAogICAgIFRyeUdldEJ5SWQsCiAgICAgR2V0QnlWYWwsCi0g
ICAgUHV0LAorICAgIFB1dEJ5SWQsCisgICAgUHV0QnlWYWwsCiAgICAgSW5CeUlkLAogICAgIElu
QnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC0zNjUsNiArMzY2LDcgQEAgY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm8gewogICAgICAgICBHUFJSZWcgYnJhbmRHUFI7CiAgICAgfSByZWdzOwog
ICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBt
X2FycmF5UHJvZmlsZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUjsKICAgICAvLyBGSVhNRTogWzMyLWJpdHNdIENoZWNr
IGlmIFN0cnVjdHVyZVN0dWJJbmZvOjpiYXNlVGFnR1BSIGlzIHVzZWQgc29tZXdoZXJlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4
MjEuLjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0
YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0
dXJlcygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIo
YmFzZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5
ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUu
bWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0
aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkg
YSByZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBu
ZXdTZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAs
MTAgKzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkg
ewogICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVj
dCB8fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8g
cHJpdmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8g
bm9kZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgp
OwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0
cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIo
KS51aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAg
ICAgICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAg
ICAgICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5l
d1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVj
dHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRy
YW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAg
bmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDcz
LDcgKzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1
MiwxMCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
Ci0gICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVj
dHVyZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCkt
PmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZi
NDgxNWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2
NDg2YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1
czoKQEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAg
ICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4
IDYzZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNiZDYyN2IuLjg2Y2M2ZmFiYjU1Njcx
MWNiNzczNzc4YzlmYzBlNDQ1ZDBlOGY3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3Bv
aW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcg
KzczLDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2
YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAi
UHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVn
RXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5j
bHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVD
b2RlUGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7
CiAgICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAg
ICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2Yg
UHV0QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQg
dGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YXJpYW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9k
ZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZh
cmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAg
ICB2b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7
CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVj
dCwgRUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBO
b2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUp
OwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0
dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwg
RUNNQU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVG
aWVsZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBA
IC00NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAg
ICAgICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5
IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAv
LyB0aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0
aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5
IHJhcmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0
dXJlU2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQu
IFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVz
L1B1dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxl
bWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlT
dGF0dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdo
dCBub3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0
aGlzIHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1
dHVyZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkg
KzQ1OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVk
VmFsdWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFs
dWUpCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFj
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpS
ZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRl
bnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1
cmUoKSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZh
cmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9k
ZSogYmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0g
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1
ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNN
QU1vZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29s
IGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
ZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1
dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZv
KGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFk
ZFRvR3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBi
b29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1v
ZGUpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBC
eXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYg
KCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5
SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1
dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkp
IHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9H
cmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVy
LCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwg
ZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlk
U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4u
aXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1
cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRM
KCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6
dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5n
TGlzdFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8
fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nl
c3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVj
dCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlm
IChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRC
eVN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICBpZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAg
aWYgKCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwg
cHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4
LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChV
TkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21w
aWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVz
ZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMp
KSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAg
ICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlh
bnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRC
eU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1
cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlh
bnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFz
ZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5
U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNl
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0
QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7
CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNl
KTsKIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1
ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2
OCwxMiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVu
dENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFy
aWFudDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVz
KGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlh
bnQuY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC01MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlh
bnQ6OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0
QnlWYXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBO
b2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0Rp
cmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0
OiB7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
UHJpdmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29u
c3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2
YXRlRmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJ
ZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9w
dGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVz
LmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1
cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAg
ICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVt
VmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8
IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRC
eVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9y
cGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgp
KSB7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6
bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhw
cml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29t
cGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlk
U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5y
ZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0
QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChj
b25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAg
ICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11
bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRh
LmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMo
KTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAg
ICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAg
YWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
cHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9
PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsK
ICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAg
ICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3Rh
dHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9y
ZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsK
KyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJp
dmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNl
KTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdp
bigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25T
ZXQoKSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5
dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNl
dCA9IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlk
U3RhdHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAg
ICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9i
YXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5k
ZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0
ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNv
bWVzIG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBp
bmZvcm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGlu
Zm8gZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNl
bGwgdGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5
Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYg
YnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50
b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1
dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFs
SW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlz
U3ltYm9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAg
ICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVy
dHkpOworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFj
a1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4o
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1
cmUodWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAg
IHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJl
bnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZh
dGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3Rh
dHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxl
QXNQdXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAg
ICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZv
KGJ5dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1Niwx
MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtp
ZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9m
bGFncy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0
dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMg
cHV0QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAg
ICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
ck51bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFN
b2RlKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlT
dGF0dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1v
ZGUoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9
CiAKQEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9i
YWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAg
ICAgICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxz
ZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmll
bGRQdXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRo
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6
Okxpa2VseVRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFy
aWFudHMoKSAhPSAxCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0g
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBd
LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAgICAgICAgICAgICAgICAgICAgfHwg
c3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBn
ZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtODgxOSw0NSArODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JF
eGl0SW5kZQogICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJv
b2wgaXNEaXJlY3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CiAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQ
dXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNr
VG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0
ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhl
IGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8g
YmVjb21lcyBudWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBp
bmZvcm1hdGlvbi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAg
JiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRv
b2tTbG93UGF0aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRW
YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAg
ICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRl
bnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRl
bnRpZmllci5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5m
cmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogCisgICAgUHV0QnlTdGF0dXMgc3RhdHVz
ID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBj
dXJyZW50Q29kZU9yaWdpbigpKTsKKworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAg
ICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVu
dGlmaWVyKCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlm
aWVyLnVpZCgpOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVy
LmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
aWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgp
KTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5m
bywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdElu
ZGV4LCBieXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlk
ID0gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAg
ICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJl
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKQEAg
LTg4NjgsOCArODgzOSwxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChC
eXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQogICAgICAgICBhZGRW
YXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBM
ZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICBhZGRWYXJBcmdDaGlsZChu
dWxscHRyKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgotICAgICAgICBhZGRUb0dyYXBoKE5v
ZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKKyAgICAg
ICAgTm9kZSogcHV0QnlWYWwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQ
dXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJ
bmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgLy8g
UHV0QnlWYWwgYW5kIFB1dEJ5VmFsRGlyZWN0IG11c3QgYmUgdHJlYXRlZCBhcyBpZiB0aGV5IGNs
b2JiZXIgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSB0aGVtIGdlbmVyaWMu
CisgICAgICAgIGlmIChzdGF0dXMub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkp
CisgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmFkZChwdXRCeVZhbCk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDkx
NjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJm
NzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRleCA4NmEzZDA3NjY0ZDdm
YTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcx
ZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0
YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZh
MmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRC
eVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3Rh
dHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNo
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MDEsNyArNTAxLDcg
QEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVZh
bHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBjbGFzcyBDb25zdGFudEZv
bGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xk
U3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZSh2YXJpYW50Lmlk
ZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRv
R2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgIH0KIAot
ICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9k
ZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRQdXRCeU9m
ZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFs
dWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5v
cmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0
LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAg
VHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFu
c2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
KSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAg
ICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0
YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBub2RlLT5vcmlnaW4uZXhp
dE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFn
ZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBOdWtlU3RydWN0dXJlQW5k
U2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0
dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUHV0QnlJZFN0
YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBQdXRCeVN0
YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICBiYXNlVmFs
dWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIG5vZGUtPmNhY2hl
YWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50
aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAog
ICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4ICsxNDIyLDggQEAgY2xh
c3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogCiAgICAgICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5z
aXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3Rh
dHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5j
b25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENv
bmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAg
ICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcml2YXRl
RmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlv
blNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBo
LmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0
NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29u
c3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0
ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBFZGdlKGJhc2VOb2RlKSk7CiAKICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5l
bnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA2
MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhj
OTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3
MmFjNzM4NTA5Li5lMjViMWYzODU0OTM1NGFlMTMyYWRkYmNiNjhhY2I5ZGE4MGI1Mjk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTEyMzYsNiAr
MTIzNiwxMCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNlPihjaGlsZDIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGNoaWxkMSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAgIC8vIER1ZSB0byByZWdp
c3RlciBwcmVzc3VyZSBvbiAzMi1iaXQsIHdlIHNwZWN1bGF0ZSBjZWxsIGFuZApAQCAtMjg2NSw3
ICsyODY5LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNh
c2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZjOWRjNDM5NDFlNTFjOGUzMTVkYTcz
NWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5NTA4NzYzOGY4NmRkNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTM4NSw4ICszODUsOCBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9k
ZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5nZXRC
eVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0YXR1cygpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwotICAgIGlmIChub2RlLT5oYXNQdXRC
eUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5SWRTdGF0
dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVzKCkpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNFbnVtZXJh
dG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZW51bWVyYXRvck1vZGVz
ID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSk7CiAgICAgaWYgKG5vZGUt
PmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDYyYTFmZWYz
ZGMyY2RkZTEwOTE1MjRkNjczNDA4NDBmZDNmMjYwYjEuLjFiZWM4ZGVlZDlkYmRiYTUwN2Q5YTNm
YjFiMDM5ZTI2ZWUxYWRkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAg
LTEyMDIsNiArMTIwMiw3IEBAIGNsYXNzIEdyYXBoIGZpbmFsIDogcHVibGljIHZpcnR1YWwgU2Nh
bm5hYmxlIHsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsKIAogICAg
IEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd0dldEJ5VmFsOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xv
d1B1dEJ5VmFsOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZjOWRiMWE3YzU0NGZhMWNh
OThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5YTc5MTg0MmU4ODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMjUy
LDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIGxpbmtCdWZm
ZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBsaW5rQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5rQnVmZmVyKTsKKyAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFhNDA5NGY1NzA2MGE3Y2Rh
OWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkxYjI5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTk5LDYgKzE5OSwxMSBA
QCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgICAgICBtX3B1
dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4oZ2Vu
LCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlWYWwoY29uc3QgSklUUHV0
QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgIHsK
KyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZh
bEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAgIHZvaWQgYWRkRGVsQnlJ
ZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93
UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBAIC0zNjAsNiArMzY1LDcg
QEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0
QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5VmFs
R2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAgICBWZWN0b3I8SW5saW5l
Q2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9wdXRCeVZhbHM7CiAgICAg
VmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPiwgND4gbV9kZWxC
eUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5VmFsR2VuZXJhdG9y
PiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRJbkJ5
SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2NGYwZDZmNDY0NjY0ZDBm
Li4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBFeGl0TW9k
ZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUp
CiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFkMjc3YTE5YmQxYzlhLi43
Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0
ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCisjaW5jbHVkZSAi
UHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oIgogI2lu
Y2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCkBAIC05
Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAKIHN0cnVjdCBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Owog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0zMjEwLDE1ICszMjEwLDE1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEluQnlTdGF0dXMq
PigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0dXMoKQorICAgIGJvb2wg
aGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0
QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlTdGF0dXM7CiAg
ICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0dXMoKQorICAgIFB1dEJ5
U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzUHV0QnlJZFN0
YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5SWRTdGF0dXMqPigpOwor
ICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5m
by5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNEZWxldGVCeVN0YXR1
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggZTc1YmNmZThh
MWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2ZkYWM4ZjIzNTE4Mjg3MjI0
ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGaWx0ZXJQdXRCeVN0YXR1
cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRlbGV0ZUJ5U3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJTZXRQcml2YXRlQnJhbmRT
dGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCBiMWNmZWU4YWNlYzM4
Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4YjFjNGNmYTZhMzExMDI4
Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMTUsMjEgKzIxNSw2IEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJs
b2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNh
bGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAg
ICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbCkgewot
ICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUgb3BfcHV0X2J5X3ZhbCBhcyBQdXRCeUlkIGFu
ZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVuIHdlIGZvdW5kIFN0cnVjdHVyZVN0dWJJbmZv
IGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHN0aWxsIGl0
IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZpbmQgU3RydWN0dXJlU3R1YkluZm8gaGVyZS4g
TGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpby4KLSAgICAgICAgICAgICAgICAv
LyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlzIGNvbXBpbGVkLgotICAgICAgICAgICAgICAg
IC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAgICAgICAgICAgICAgLy8gMy4gU2luY2UgKEEp
IGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcHV0X2J5X3ZhbCwgKEIpIGNhbiBnZXQg
U3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQgYXMgaW5saW5lZCBTZXR0
ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0LiAoQSkncyBKSVREYXRhIGlzIGRlc3Ryb3ll
ZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNvbWVzIExMSW50LgotICAg
ICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxvY2sgaW5saW5pbmcgKEEpIGdldHMgT1NSIGV4
aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkgZ2V0cyBCYXNlbGluZSBD
b2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgLy8gNi4gKEIpIGdldHMgT1NSIGV4aXQu
IChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJbmZvIGluIChBKSBmb3Ig
UHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBkb2VzIG5vdCBleGlzdCBz
aW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQgb25jZS4KLSAgICAgICAgICAgICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kQnlWYWxJ
bmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBieVZh
bEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhD
b2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1YkluZm8tPmRvbmVMb2Nh
dGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAK
aW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhmZDU4YS4uMWY0MTgzMThh
NGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZpbHRlckNh
bGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
QEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhv
c2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4gVGhp
cyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3
ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQg
dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3
ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBl
bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uo
Y3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2Zm
c2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVhcigp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQu
YWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAg
IGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3Vy
cmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcgQEAgY2xhc3MgT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYyZWNlODBmZTc0ZjIuLjg5
ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01hcFNldDoKICAgICAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRiOWM5YTVhMjAuLmQ1NDk2
NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1
czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZTMyNDdmOGM2OTI2ZDI5N2I2Y2Ey
Y2YxNGUyZDZiNWQ5OTNlYjZiLi42MDNmZjdiMmU1MmRjZWVlM2JjMzY1ZGJjNGVlMzNiM2MzN2Ux
ZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZh
OGYxMGE0Yy4uMjM4MDdiNjE4Mjc4YTE0ZGQyY2E1ZjM4MmM5N2M4M2FmYWEwNzhiOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0zMTc3LDM0ICszMTc3LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgpID09IFB1dEJ5VmFsRGly
ZWN0LCBub2RlLT5vcCgpKTsKLQotICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0g
Q2VsbFVzZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmlu
Z1VzZSkgewotICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0
cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpIHx8IChjaGls
ZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxV
c2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3Ry
aW5nKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQy
LnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMp
OworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1i
b2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhT
eW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAg
IGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywg
Y2hpbGQxKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxk
Mik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IGFyZzNHUFIgPSBhcmczLmdwcigpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpCisgICAg
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIs
IGFyZzNHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnMSh0aGlzLCBjaGlsZDEpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Mih0aGlzLCBjaGlsZDIpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBj
aGlsZDMpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFy
ZzNHUFIgPSBhcmczLmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1v
ZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJH
UFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAg
ICAgICAgIAorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNo
aWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIs
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87CisgICAgICAg
ICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgc3R1YkluZm9H
UFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BlY3Vs
YXRlKG5vZGUsIGNoaWxkMik7CisgICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgY2hpbGQzKTsK
KworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljOworICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENh
bGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3Jp
Z2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0
ID0gbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVj
bWFNb2RlID0gbm9kZS0+ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSLCBlY21hTW9kZSwgaXNEaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3QpOworCisgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkMiku
aXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9k
ZShjaGlsZDIpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
c3RhdGUuZm9yTm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4u
c2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhH
ZW5lcmF0b3I+IHNsb3dQYXRoOworICAgICAgICAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVy
YXRpb24sCisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIG51bGxwdHIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtX2ppdC5hZGRQdXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKwog
ICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU4NzEsNyArNTkzMSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAppbmRleCBi
OTA2NjVlY2NlNTJjNTdmNDRiNzBkNDY3YzRhNGU1YTVmMzcwMmUwLi45MzFiYWI1MDMzNjFlOTcy
MGY3MmJkNjY3MTliN2E2MTdlZDlkMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcApAQCAtMjMz
LDYgKzIzMywxNSBAQCBjbGFzcyBTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgp
Lm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgICAg
ICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6IHsKKyAgICAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAg
ICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIp
OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8
IGNoaWxkMS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc2lkZXJCYXJyaWVyKGNoaWxkMSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAg
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggNTQxMGQ5MDg5NmRjNGYwMTA1
NzkzMGRmODJmNjYxOTJiODFmNmMwZi4uYzVlNWNmMzZhNzcwZDE1ODNiNjkzZGZkODgxZDY0MjRh
YjE3YmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAg
LTMxMiw4ICszMTIsOCBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFy
aWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgIT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhdmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgICAg
ICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCBmZGE2NGQzNWRhMzQyODg5Yzc5OGMw
NTFlOTU3NmU4YTFlMzNhMzliLi5mMWEzODA5ZDdlZmUzMGY4ZDU5YmEyMWZhY2QwNzA5ZTQzOGI5
MDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBjbGFzcyBWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAg
IGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CkBAIC00MjEsNyArNDIxLDcgQEAgY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJD
YWxsTGlua1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggMDNmODY1MmM2Y2I4MmM2MjAyMGQxZTY2
YmI1OWY0NjU5MWQ4M2U0Yy4uODNiNTFiYTljZjc2NWRhMDQ2MzczYTc5YjFjYTAzMzBjNDNjN2E3
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApA
QCAtNDA3LDcgKzQwNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNWEzZTk4Zjc1MzcwMWQzYjM0Zjg0Yjk4MDgzZDI0
ZGFlOGVmNzEwMC4uNTc1MjY0MjAyMzdhYmIwZmFlN2E3NWU2MDI0NDc2NzUxZWYzMTdhOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTY0
OSw3ICsxNjQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTU1NTYsNTcgKzU1NTYsMTU1IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7Ci0gICAgICAg
ICAgICAgICAgVl9KSVRPcGVyYXRpb25fR0NDSiBvcGVyYXRpb24gPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0
Q2VsbFN0cmluZ05vblN0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENl
bGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5n
Tm9uU3RyaWN0OworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFp
bnMobV9ub2RlKSB8fCAoY2hpbGQxLnVzZUtpbmQoKSAhPSBDZWxsVXNlICYmIGNoaWxkMS51c2VL
aW5kKCkgIT0gS25vd25DZWxsVXNlKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZDEudXNl
S2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25f
R0NDSiBvcGVyYXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQy
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0
cmluZ1N0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0
Q2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmlj
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbENlbGxTdHJpbmdTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbENlbGxTdHJpbmdOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9p
bnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N0cmluZyhjaGlsZDIpLCBs
b3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVy
YXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3Ry
aW5nKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVz
ZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+
b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3Q7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
PmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQs
IG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBs
b3dTeW1ib2woY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dD
ZWxsKGNoaWxkMSksIGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HSkpKIG9wZXJhdGlvbjsKLSAgICAgICAg
ICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0OwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdDsKKyAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HSkpKIG9wZXJhdGlvbjsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3Ry
aWN0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgp
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3Q7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgICAg
ICAgICBWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCisgICAgICAg
ICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBsb3dK
U1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBW
b2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAg
ICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hp
bGQzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisKKyAgICAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChjaGlsZDEpOworICAgICAgICAgICAgTFZhbHVlIHByb3Bl
cnR5ID0gbG93SlNWYWx1ZShjaGlsZDIsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxkMywgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKGNoaWxkMik7CisgICAgICAgICAg
ICBzcGVjdWxhdGUoY2hpbGQzKTsKKyAgICAgICAgICAgIGJvb2wgcHJvcGVydHlJc1N0cmluZyA9
IGZhbHNlOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzSW50MzIgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGJvb2wgcHJvcGVydHlJc1N5bWJvbCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGFi
c3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChhYnN0cmFjdFZh
bHVlKGNoaWxkMikuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIHByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChhYnN0cmFjdFZhbHVlKGNo
aWxkMikuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOworCisgICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29t
ZVJlZ2lzdGVyKGJhc2UpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lz
dGVyKHByb3BlcnR5KTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rl
cih2YWx1ZSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9ub3RDZWxsTWFzaywg
VmFsdWVSZXA6OmxhdGVSZWcoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikpOworICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fbnVtYmVyVGFnLCBWYWx1ZVJlcDo6bGF0ZVJlZyhH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkZUTEpJVCkgPyAxIDogMDsKKworICAgICAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhwYXRjaHBvaW50KTsKKworICAgICAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRs
U3RhdGU7CisgICAgICAgICAgICBDb2RlT3JpZ2luIG5vZGVTZW1hbnRpY09yaWdpbiA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbV9ub2Rl
LT5lY21hTW9kZSgpOworICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG1fbm9kZS0+b3AoKSA9
PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uY29kZU9yaWdpbnMtPmFkZFVuaXF1ZUNh
bGxTaXRlSW5kZXgobm9kZVNlbWFudGljT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdGhlIGRpcmVjdCBleGl0IHRhcmdldCBmb3Igb3BlcmF0aW9uIGNhbGxzLgorICAgICAg
ICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0gZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNyZWF0ZWQg
YnkgdGhlIElDIGZvciBnZXR0ZXJzLiBXZSBkb24ndCBoYXZlCisgICAgICAgICAgICAgICAgLy8g
dG8gZG8gYW55dGhpbmcgd2VpcmQgb3RoZXIgdGhhbiBjYWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwg
YXNzb2NpYXRlIHRoZSBleGl0IHdpdGgKKyAgICAgICAgICAgICAgICAvLyB0aGUgY2FsbHNpdGUg
aW5kZXguCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVh
dGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOworCisgICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHBhcmFtc1syXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNj
cmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0
b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BS
UmVnLCBzdHViSW5mb0dQUiwgZWNtYU1vZGUsIGlzRGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDog
UHV0S2luZDo6Tm90RGlyZWN0KTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHByb3BlcnR5SXNTdHJpbmc7CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSBwcm9wZXJ0eUlzSW50
MzI7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gcHJvcGVydHlJc1N5bWJvbDsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwg
ZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRo
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1Bh
dGhDYWxsOworICAgICAgICAgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwg
bm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
U2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24sIEludmFsaWRHUFJSZWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNl
bWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3It
PnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJl
cG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZl
ciwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtODk1MSw3ICs5MDQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0
YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xk
U3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CkBAIC04OTY2LDE2ICs5MDY0LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwor
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArOTA4NSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3Jh
Z2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3
ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1
YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3Rz
KGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUg
IlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYw
NGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0
YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNy
byhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2Vs
ZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0
QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1h
Y3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAog
ICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBl
ZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7
CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAg
bV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJ
ZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJ
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09
IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJ
ZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2lu
QnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5z
dGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6
ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDZjNGYxMWY2OGU5
MDNlYmE2N2M2ZDdlYTkzODdkODFiNDU2YWUwZjUuLjlmYThhYzk5YzliOTk0MjhmY2MwNzU2ZTY0
ZmYzYjM3ZGU0Njk0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CkBAIC0yNjgsMTAgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwogCiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIApAQCAtMzgy
LDM4ICszNTYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxl
KiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmls
ZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9m
aWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBl
bWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKLSAg
ICAgICAgCi0gICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxl
Kik7Ci0gICAgICAgIAotICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBp
biByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KLSAgICAgICAgLy8gVGhlIHZh
bHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBh
bmQKLSAgICAgICAgLy8gemVyby1leHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVj
dHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLgotICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNh
c2VzLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dEludDMyUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgSW50MzJT
aGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IEp1bXBMaXN0IGVtaXREb3VibGVQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlW
YWxJbmZvLCBEb3VibGVTaGFwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5
VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyopOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBU
eXBlZEFycmF5VHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTEwNjQsNiArMTAwOSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8SklUR2V0QnlWYWxHZW5lcmF0b3I+IG1fZ2V0QnlWYWxzOwog
ICAgICAgICBWZWN0b3I8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiBtX2dldEJ5SWRzV2l0
aFRoaXM7CiAgICAgICAgIFZlY3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRzOwor
ICAgICAgICBWZWN0b3I8SklUUHV0QnlWYWxHZW5lcmF0b3I+IG1fcHV0QnlWYWxzOwogICAgICAg
ICBWZWN0b3I8SklUSW5CeUlkR2VuZXJhdG9yPiBtX2luQnlJZHM7CiAgICAgICAgIFZlY3RvcjxK
SVRJbkJ5VmFsR2VuZXJhdG9yPiBtX2luQnlWYWxzOwogICAgICAgICBWZWN0b3I8SklURGVsQnlJ
ZEdlbmVyYXRvcj4gbV9kZWxCeUlkczsKQEAgLTEwOTEsNiArMTAzNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAg
ICAgICB1bnNpZ25lZCBtX2dldEJ5SWRXaXRoVGhpc0luZGV4IHsgVUlOVF9NQVggfTsKICAgICAg
ICAgdW5zaWduZWQgbV9wdXRCeUlkSW5kZXggeyBVSU5UX01BWCB9OworICAgICAgICB1bnNpZ25l
ZCBtX3B1dEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlJ
ZEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5VmFsSW5kZXggeyBV
SU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2RlbEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAppbmRleCA2OWJmMWExYzNmOGExYTM5MTY5YzZkMzk5YzJiMGM2NzZjODhjZjY0
Li40ZmFlNWFkNjcxZmQwZWI1ZmY1NzEwNTdiNGFkNTMwYTQwNDFjNzJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApA
QCAtMTQyLDcgKzE0Miw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwg
CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICAgICAgOiBKSVRC
eUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQor
ICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlJZCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFs
dWUsIHN0dWJJbmZvR1BSKQogICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgICAg
ICwgbV9wdXRLaW5kKHB1dEtpbmQpCiB7CkBAIC0zODEsNiArMzgxLDY4IEBAIHZvaWQgSklUR2V0
QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVy
JiBzbG93UGF0aCkKICAgICAgICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+
c2xvd1BhdGhTdGFydExvY2F0aW9uOwogfQogCitKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0
QnlWYWxHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSLCBFQ01BTW9kZSBlY21hTW9kZSwg
UHV0S2luZCBwdXRLaW5kKQorICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmln
aW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCisgICAgLCBtX2Vj
bWFNb2RlKGVjbWFNb2RlKQorICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCisgICAgLCBtX2Jhc2Uo
YmFzZSkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgbV9zdHViSW5mby0+aGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisKKyAgICBtX3N0dWJJbmZvLT5iYXNlR1BSID0gYmFzZS5w
YXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+cmVncy5wcm9wZXJ0eUdQUiA9IHByb3BlcnR5
LnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZUdQUiA9IHZhbHVlLnBheWxvYWRH
UFIoKTsKKyAgICBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSID0gc3R1YkluZm9HUFI7CisgICAg
bV9zdHViSW5mby0+bV9hcnJheVByb2ZpbGVHUFIgPSBhcnJheVByb2ZpbGVHUFI7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5iYXNlVGFnR1BSID0gYmFzZS50YWdHUFIo
KTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgIG1f
c3R1YkluZm8tPnYucHJvcGVydHlUYWdHUFIgPSBwcm9wZXJ0eS50YWdHUFIoKTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJiBqaXQpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OworICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgIH0gZWxzZQorICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGpp
dC5wYXRjaGFibGVKdW1wKCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKK3ZvaWQg
SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5r
QnVmZmVyJiBzbG93UGF0aCkKK3sKKyAgICBCYXNlOjpmaW5hbGl6ZShmYXN0UGF0aCwgc2xvd1Bh
dGgsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3RhcnQpKTsK
KyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCisgICAgICAgIG1fc3R1Yklu
Zm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK30KKwor
Vl9KSVRPcGVyYXRpb25fR1NzaUpKQyBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6c2xvd1BhdGhGdW5j
dGlvbigpCit7CisgICAgc3dpdGNoIChtX3B1dEtpbmQpIHsKKyAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgaWYgKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3Q6CisgICAgICAgIGlmIChtX2VjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICBBU1NFUlQobV9lY21hTW9kZS5p
c1N0cmljdCgpKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZFNldDoKKyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
fQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3I6OkpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
YnJhbmQsIEdQUlJlZyBzdHViSW5mb0dQUikKICAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBl
LCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCmluZGV4IGVlNjgxNDEwMWE4MWViZDE1NWJmNGRiNjkzZmY0N2M4YTI3OGY3ZmIuLjNj
ZTVkMzdkMmM0MGRjOTkwNDllMTJhZDUzMTRiODk1ZjRjMDM0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKQEAgLTEyOSw5
ICsxMjksNyBAQCBjbGFzcyBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgSklUQnlJZEdlbmVyYXRvciB7CiAKIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiBwdWJsaWM6Ci0gICAgSklUUHV0QnlJZEdlbmVy
YXRvcigpCi0gICAgICAgIDogbV9lY21hTW9kZShFQ01BTW9kZTo6c3RyaWN0KCkpCi0gICAgeyB9
CisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IoCiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLApAQCAtMTQyLDEwICsxNDAsNDIgQEAgY2xhc3MgSklU
UHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKICAgICBW
X0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKLSAg
ICBFQ01BTW9kZSBtX2VjbWFNb2RlOworICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9k
ZTo6c3RyaWN0KCkgfTsKICAgICBQdXRLaW5kIG1fcHV0S2luZDsKIH07CiAKK2NsYXNzIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsK
KyAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CitwdWJsaWM6CisgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvcigKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCisgICAg
ICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyBy
ZXN1bHQsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgRUNNQU1v
ZGUsIFB1dEtpbmQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3dQYXRoSnVtcC5tX2p1bXAuaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiBtX3Nsb3dQYXRoSnVtcC5tX2p1bXA7CisgICAgfQorCisgICAg
dm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXIm
IHNsb3dQYXRoTGlua0J1ZmZlcik7CisKKyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKKworICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlv
bigpOworCitwcml2YXRlOgorICAgIEVDTUFNb2RlIG1fZWNtYU1vZGUgeyBFQ01BTW9kZTo6c3Ry
aWN0KCkgfTsKKyAgICBQdXRLaW5kIG1fcHV0S2luZDsKKworICAgIEpTVmFsdWVSZWdzIG1fYmFz
ZTsKKyAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7Cit9OworCiBjbGFzcyBKSVREZWxCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvciB7CiAgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRl
eCAxN2MyN2ZkYzFjZDNiZjYzMjZhNDNiNWZlZjgxZTYwZTZjYzQ3ZjAyLi42N2UwYjc4MzA5YTQz
ZjJiYmI5OWE5MWIzNjg5YjkyN2IyNjJkYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaApAQCAtMzUyLDYgKzM1MiwxNCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZQog
ICAgIH0KIH0KIAoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAg
ICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2hH
UFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKSk7CisgICAgfQorfQorCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQogewogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09m
TWF5U3RvcmVUb0hvbGUoKSk7CkBAIC0zNjIsMjQgKzM3MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpCiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNz
T2ZPdXRPZkJvdW5kcygpKTsKIH0KIAotaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFy
cmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCi17Ci0gICAgYXV0byBhcnJheVByb2ZpbGVT
YXcgPSBbXSAoQXJyYXlNb2RlcyBhcnJheU1vZGVzLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkg
ewotICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25vcmluZ1R5cGVkQXJyYXlzKGFy
cmF5TW9kZXMsIGNhcGFiaWxpdHkpOwotICAgIH07Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKLSAgICBBcnJheU1vZGVzIGFycmF5TW9k
ZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMobG9ja2VyKTsKLSAgICBpZiAoYXJyYXlQ
cm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVERv
dWJsZTsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEludDMyU2hhcGUpKQot
ICAgICAgICByZXR1cm4gSklUSW50MzI7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1v
ZGVzLCBBcnJheVN0b3JhZ2VTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7
Ci0gICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7Ci19Ci0KIEFMV0FZU19JTkxJTkUgaW50MzJfdCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBkMjRkOWY1ZWRmODcxNTgzOGQ3NzVi
ZWNjNzFmODE5MjRjYjkzYzk3Li43ZmQwNDYzMjgxZTM1ZGZlNTVmYWUyMDYxMDBhMTVkYTk3MTlh
Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAg
LTcxOSw3ICs3MTksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwg
KnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBz
bG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0K
IAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzUx
LDcgKzc1MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0
dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90
LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAog
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzgy
LDcgKzc4Miw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpz
dHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC04MTMs
NyArODEzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmEKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0
dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwg
KnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFB1dFByaXZhdGVGaWVsZENhbGxiYWNrPgpAQCAtODg4LDcgKzg4OCw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUsIHZvaWQsCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlw
ZSwgYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNz
VHlwZSkpOwogCiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNv
ZGVCbG9jaywgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQ
dXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUs
IGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lKTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1
YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
KTsKICAgICB9KTsKIH0KIApAQCAtOTI0LDE2ICs5MjQsMTUgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEoKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1
cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xv
dCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOworICAgICAgICAg
ICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRT
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlk
LCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOwogICAgIH0pOwogfQogCi1zdGF0aWMg
dm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBFQ01BTW9kZSBlY21hTW9kZSkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
SlNWYWx1ZSB2YWx1ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFN
b2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IGluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBi
eVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGkgPSAqaW5k
ZXg7CiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CkBAIC05NDIsNyArOTQxLDggQEAg
c3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJv
dW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNl
KCk7CiAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmpl
Y3QsIGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtOTUxLDMyICs5NTEsMzAgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUg
c3UKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRl
eChnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAg
cmV0dXJuOwotICAgIH0gCisgICAgfQorCiAgICAgaWYgKHN1YnNjcmlwdC5pc051bWJlcigpKSB7
Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGJh
c2VWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUt
PnNldE91dE9mQm91bmRzKCk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2Zp
bGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIHByb3Bl
cnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAvLyBEb24n
dCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgaWYgKGJ5VmFsSW5mby0+
c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJD
ZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkp
Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlz
U3RyaWN0KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eSwgdmFsdWUsIHNsb3QpOwogfQogCi1zdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJz
Y3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21h
TW9kZSkKK3N0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2
YWx1ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF5
YmVJbmRleCA9IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpbmRleCA9ICpt
YXliZUluZGV4OwogCiAgICAgICAgIHN3aXRjaCAoYmFzZU9iamVjdC0+aW5kZXhpbmdUeXBlKCkp
IHsKQEAgLTk4OCw3ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsK
KyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTAwMiwxNSArMTAwMSwxMSBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkgewotICAgICAgICBieVZhbElu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAg
ICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgp
LCB2YWx1ZSwgMCwgZWNtYU1vZGUuaXNTdHJpY3QoKSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhy
b3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmll
cjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2Fj
aGVkSWQudWlkKCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0
aCA9IHRydWU7Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoYmFzZU9iamVjdCwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhz
OjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVy
dHksIHZhbHVlLCBzbG90KTsKQEAgLTEwMjMsMjI2ICsxMDE4LDIwNiBAQCBlbnVtIGNsYXNzIE9w
dGltaXphdGlvblJlc3VsdCB7CiAgICAgR2l2ZVVwLAogfTsKIAotc3RhdGljIE9wdGltaXphdGlv
blJlc3VsdCB0cnlQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRCeVZh
bE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01B
TW9kZSBlY21hTW9kZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLQotICAgIC8v
IFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJl
c3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXpl
ZDsKLQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkg
JiYgaXNDb3B5T25Xcml0ZShiYXNlVmFsdWUuZ2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSkK
LSAgICAgICAgcmV0dXJuIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotCi0gICAgaWYgKGJh
c2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0KLSAgICAgICAgQVNTRVJUKGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBB
U1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFi
bGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGlt
aXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZv
clN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1p
dHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsK
LSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgIGlmIChiYXNl
VmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2Jq
ZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5p
bmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvZmlsZSkgeworICAgICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
ciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXBhdGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZh
bHVlLCBzdWJzY3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0LCBlY21hTW9kZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8g
cGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0
LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGlt
aXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3Qt
PnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgICAgICBpZiAo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQp
KSB7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlw
dC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJv
bCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSk7CisgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBlY21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0g
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2Fj
aGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewotICAgICAgICBjb25zdCBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6
R2l2ZVVwKTsKLSAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4
KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2Rl
SW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wUHV0QnlWYWw+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
UHV0S2luZDo6Tm90RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBs
aWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJs
b2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwg
YmFzZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXRJbmxpbmUoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFj
Y2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
Q2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
KyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRC
eUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRp
b25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9u
UmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYg
d2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhl
biBtYWtlIHN1cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4u
IEZvciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAv
LyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkg
Zm9yIHVzIHRvIG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgcHV0X2J5X3ZhbCBtYXkgYmUg
cG9seW1vcnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAv
LyB0aGUgcmVzdWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0
aENvdW50ID49IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3Vs
dDsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogfQogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmls
ZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1
bHQgcmVzdWx0ID0gdHJ5UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
Y29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkg
ewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlWYWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBi
eVZhbEluZm8sIGVjbWFNb2RlKSk7CisKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBz
dHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotc3RhdGljIE9wdGlt
aXphdGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIG9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewot
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwogCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0g
ICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJl
c3VsdDo6Tm90T3B0aW1pemVkOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAorICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0
dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBB
cnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQorewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAg
IEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3Ry
dWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJl
KSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJl
KTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0RGlyZWN0KGFycmF5TW9k
ZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7CisgICAgaWYgKCFpc0Nv
cHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQz
MigpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0
dXJlKHZtKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZt
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CiAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLQotICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywg
YnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgICAg
ICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVC
bG9jaywgc3RydWN0dXJlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGF0Y2hBcnJh
eVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
KnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgfQorICAgIH0K
IAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmpl
Y3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRp
bCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRp
b25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCku
aW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
bygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXA7Ci0gICAgfSBlbHNlIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJs
ZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9u
UmVzdWx0OjpHaXZlVXApOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8t
PnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8
T3BQdXRCeVZhbERpcmVjdD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBQdXRLaW5kOjpEaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxp
a2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBv
cHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxv
Y2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSk7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVj
bWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CisKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0
cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIENvbW1vblNsb3dQ
YXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworCisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkp
OworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRC
eShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6
YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0
aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8g
SWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcg
dGhlbiBtYWtlIHN1cmUgd2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdh
aW4uIEZvciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAg
ICAvLyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5p
dHkgZm9yIHVzIHRvIG9ic2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkg
YmUgcG9seW1vcnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAg
ICAvLyB0aGUgcmVzdWx0IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93
UGF0aENvdW50ID49IDEwKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBzdWJzY3JpcHQsIHZh
bHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3Vs
dDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9k
ZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
VmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRT
dWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCBy
ZXN1bHQgPSB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBjb2RlQmxvY2ssIG9iamVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7
Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbElu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyks
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQogCi0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIG9iamVjdCwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworICAgIGRpcmVjdFB1dEJ5VmFs
T3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkp
OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1v
ZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKLSAgICAKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAotICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZh
bHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKyAgICBkaXJlY3RQ
dXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNs
b3BweSgpKTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNN
QU1vZGUgZWNtYU1vZGUpKQorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwor
CisgICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUs
IHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKKworICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFs
dWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKworICAgIHN0dWJJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7
Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0g
ICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJz
Y3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKworICAgIHN0dWJJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09i
amVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3Ry
aWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJl
Y3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwg
dmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5k
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggMjU4NGU5
OTVlNDY2ZGU5NGE5YjIwMzI3YjBlYzQ4ODFkNWYxOTk5OC4uZWZiZDg4NzM1NDJmYzNmNGJlODNl
MDZiZTA2MjU3YmZjMjljYzQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgKQEAgLTIwMywxMCArMjAzLDE1IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwg
RUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CiAKIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBFQ01BTW9kZSkpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZy
YW1lKiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDNkMWQ4NGZjODIwMmJm
ODg5YmRmMjBlYTMzOGRmOGE5MTEwOTA2M2IuLmYxNzZjYmI4MTk0YzkxNmI2N2U1ZTZmYzFiNjkw
MWFmNTAxNGZhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCkBAIC00MzgsMTc4ICs0MzgsMzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNt
YU1vZGU7CisgICAgUHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlW
YWw+ID8gUHV0S2luZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGlyZWN0OwogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGJvb2wgcHJv
cGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0
eSk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQotICAgICAgICBtb3Zl
KEltbTMyKGdldE9wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7Ci0gICAgZWxz
ZQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0KKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleDsKLSAgICBpZiAo
IXByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBhdXRvIGlzSW50
MzIgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVB
ZGRyZXNzKCZieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOwotICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1Qx
KTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgotICAgICAgICB6ZXJvRXh0ZW5kMzJU
b1dvcmQocmVnVDEsIHJlZ1QxKTsKLSAgICB9Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7Ci0KLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5
cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZCBkbyB0aGlzIGlubGluZT8KLSAgICBsb2FkOChBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsKLSAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOwogCi0gICAgSklUQXJyYXlNb2RlIG1v
ZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAg
Y2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
RG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGln
dW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChi
eXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0LCBlY21hTW9kZSwg
cHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJl
bCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5k
ZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0K
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAg
ICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAg
ICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1w
VGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlw
ZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBl
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0KLSAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0KLSAg
ICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDMpOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2Ug
SW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJl
Z1QzKSk7Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRp
bWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAg
ICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOwotICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBq
dW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGQ2NChudW1iZXJU
YWdSZWdpc3RlciwgcmVnVDMpOwotICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMywgZnBSZWdU
MCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAg
ICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRo
aXMpOwotICAgIAotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkp
OwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKLSAg
ICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
LSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykg
ewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAo
QWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAgSnVtcCBlbXB0eSA9
IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0
aGlzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3Rv
cmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9i
YXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5kID0ganVtcCgpOwot
ICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKLSAg
ICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0gICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVuZC5saW5r
KHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgor
ICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBl
ZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2Miwx
MiArNTE2LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21h
TW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBu
dWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFN
b2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTY3NSw0OCAr
NTMyLDQwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2Fk
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZh
bHNbbV9wdXRCeVZhbEluZGV4KytdOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBi
eVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CisgICAgLy8gVGhleSBh
cmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgorICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFIwOworICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhl
IGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CisgICAgLy8gY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIC8vIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVu
dEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
UFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBj
YWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CiAg
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChpc0RpcmVjdCA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTczNCwyMSArNTgzLDIxIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIg
PSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3Vt
ZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOwogCiAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIs
IGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIGVjbWFNb2RlR1BS
KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVl
R1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0
aW9uKHZtKTsKIAogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgQnlWYWxJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGpp
dC5mYXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAg
aml0LnJldCgpOwogCkBAIC04MTAsMTMgKzY1OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZQogCiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIg
PSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1l
bnRHUFI1OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGJh
c2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgdmFsdWVQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCB2YWx1ZUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5m
b0dQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIocHV0S2luZC52YWx1ZSgpKSwgcHV0S2luZEdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CkBAIC04NTIsMTQgKzcwMSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9
IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2Jq
ZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGpp
dC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXpl
KT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJ
bmZvR1BSLCBwdXRLaW5kR1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIHZhbHVlR1BSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOwogICAgIGpp
dC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKQEAgLTMyOTEsODIgKzMxNDAsNiBAQCB2b2lkIEpJVDo6
ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBDYWNoZWFibAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwotCi0gICAgYm9vbCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSBmYWxzZTsK
LQotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAg
ICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlu
a0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9k
ZShhcnJheU1vZGUpOwotICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxs
cHRyLCB0eXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1p
emUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBD
dXJyZW50bHksIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBuZXZlciBjb21lcyBoZXJl
LgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTE4MwotICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgICAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
LCBudWxscHRyLCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0
KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0g
ICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQocmVtb3Zl
Q29kZVB0clRhZyhtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJsZUFkZHJlc3MoKSkg
PT0gcmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOwotICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFyQ2FsbHMubGFzdCgpLmZyb20sIG1fZmFyQ2FsbHMu
bGFzdCgpLmNhbGxlZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgaWYg
KCFpc0RpcmVjdCkgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklU
U3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgp
LCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgICAgIAotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVC
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0
clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1
cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX2Jh
ZFR5cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbElu
Zm8tPm1fc2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlwZUp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMg
OiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9u
IGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJh
dGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6
YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbDxPcFB1dEJ5VmFsPihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBS
ZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4oY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLQogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwpAQCAtMzQwOCwyMjMgKzMxODEsNiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQQogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCgocHV0S2luZCA9PSBQdXRL
aW5kOjpEaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGlyZWN0KSB8fCAo
cHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QgJiYgT3A6Om9wY29kZUlEID09IG9wX3B1dF9i
eV92YWwpKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRy
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0K
LSAgICBKdW1wTGlzdCBkb25lQ2FzZXM7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAg
SklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnl0ZWNv
ZGUsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOwotCi0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbElu
Zm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlW
YWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkp
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+
ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9u
ZWFyQ2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fZmFyQ2FsbHMpIHsKLSAgICAgICAgaWYg
KGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUu
ZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXplKHBhdGNoQnVm
ZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRT
dHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNh
Y2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChw
dXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1l
LnVpZCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJl
dHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICBieVZhbEluZm8tPnN0dWJJbmZvID0g
Z2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0ID0g
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENh
bGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQot
fQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xh
dGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdv
IGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4oQnlWYWxJbmZv
KiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci10ZW1w
bGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5
VmFsRGlyZWN0PihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFi
bGVJZGVudGlmaWVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFT
U0VSVChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVy
SUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJl
Z1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsK
LSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0
ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0Owot
I2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7
Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUg
PSBicmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVk
QXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygm
YnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwot
ICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3Jh
dGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlT
Y3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAg
ICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgo
KSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBw
cm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNT
cGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
aW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCkpOwotI2Vsc2UKLSAgICBlbWl0TG9h
ZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBX
ZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2Vw
dCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xv
YmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVu
dGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVT
Y3JhdGNoMiwgZmFsc2UpOwotICAgIAotICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKLSAgICAg
ICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICBBU1NFUlQoIUpTQzo6
aXNTaWduZWQodHlwZSkpOwotICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dP
ckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIEp1bXAg
dG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMy
KDB4ZmYpKTsKLSAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAg
ICAgICBKdW1wIGNsYW1wZWQgPSBqdW1wKCk7Ci0gICAgICAgIHRvb0JpZy5saW5rKHRoaXMpOwot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGZmKSwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAg
Y2xhbXBlZC5saW5rKHRoaXMpOwotICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIH0K
LSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSAxOgotICAg
ICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5
LCBUaW1lc09uZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIHN0b3Jl
MTYoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3
bykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHN0b3JlMzIoZWFybHlT
Y3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlwZWRBcnJheVR5
cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7Ci0gICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdU
MTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQg
bGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0
OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHBy
b3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAg
ICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2Ny
YXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0
byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZElt
bTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChB
YnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0
eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlw
ZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBi
cmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwot
ICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKTsKLSAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIEp1bXAg
cmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIoZWFybHlTY3JhdGNoKSk7Ci0gICAgYWRkNjQobnVt
YmVyVGFnUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9Eb3VibGUoZWFybHlT
Y3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICBlbWl0
TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVD
YXNlID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9E
b3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwot
ICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsK
LSAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDAp
OwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBXZSB3b3VsZCBi
ZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRo
ZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgot
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMiwg
ZmFsc2UpOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBjYXNl
IDQ6Ci0gICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZwUmVnVDApOwotICAg
ICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHks
IFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICAgIHN0b3Jl
RG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWln
aHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggZTgyNjlmZDFlMTk5ZjE1MjQ4
NGViNDRkZGVmMmFhZDE3NzgyMzJmYS4uNjIwZTg0ZjY2NTBlNjE2NmYwNzY4ZGVkMmZmOTQ4YjM1
ODUyNTViOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCkBAIC00NjYsMTUxICs0NjYsMjggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAg
IGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwot
ICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAg
UGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2Uobm90
SW5kZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDEpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgaW5s
aW5lPwotICAgIGxvYWQ4KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlz
Y09mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMSwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QxKTsKLSAgICAKLSAgICBKSVRBcnJheU1vZGUg
bW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChi
eXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250
aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFy
cmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAg
YWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAK
LSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRl
eCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29u
dGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCi17Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CisgICAgUHV0S2luZCBwdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9w
UHV0QnlWYWw+ID8gUHV0S2luZDo6Tm90RGlyZWN0IDogUHV0S2luZDo6RGlyZWN0OwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoQ29udGlndW91c1NoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0
ID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0
Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJl
Z1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hh
cGU6Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9h
ZChiYXNlLCByZWdUMiwgcmVnVDMpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91Ymxl
U2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsK
LSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBK
dW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAg
bW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlz
KTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwg
VGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRk
cmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVt
cCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVn
VDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwg
cmVnVDQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDYpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCi0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJh
eVN0b3JhZ2VTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnLCBlY21hTW9k
ZSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBwYXlsb2Fk
Ci0gICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7IC8vIHRhZwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAg
IGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lh
bENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwot
ICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFk
ZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBqdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0aGlzKTsKLSAg
ICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8g
RklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2
ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC02MjAsMTIgKzQ5NywxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAg
ICAgaWYgKGlzRGlyZWN0KQpAQCAtNjMzLDIxICs1MTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAgIAorICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107
CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFi
ZWwoKTsKLSAgICAKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCiAgICAg
Ly8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lz
dGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVuIG9u
IG90aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwotICAg
IGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2FkMihiYXNlLCBy
ZWdUMiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQp
LCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CiAKLSAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdl
dCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4Kys7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUp
OworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXgg
MzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5OTAz
MTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwogICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkg
LT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAg
ICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3
aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9
CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0
dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtp
bmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgsMTIg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgCiAg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6
IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAog
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1LDEy
ICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
LXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2
b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1
dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7Cisg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFw
KTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAg
ICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNUeXBl
ZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBl
ZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmln
VWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0Ogor
ICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGlu
Z1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGlu
Z1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNo
YXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShs
b2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxw
dHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRy
KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9
CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFN
b2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAKIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNs
b3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVs
QnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlk
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdElu
QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdldEJ5
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5
S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtp
bmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdl
dChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlv
blR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rp
b247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAg
ICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQo
Y29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9
IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVu
Y3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9u
VHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQor
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KIAog
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVu
Y3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpC
eVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAg
ICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhlNi4u
ZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlLaW5k
IHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7Cisg
ICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAgICBC
eUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQgewog
CiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBy
ZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEFy
cmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9p
ZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1
Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxldGVC
eShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFs
dWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
RGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5k
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZv
aWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
T2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0
dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwg
Q2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJh
bmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3YjE1
Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMw
NmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8v
IFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMuIFRo
aXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0
dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAo
ZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNoIHJl
ZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRoICJs
bGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1aXZh
bGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>
<flag name="commit-queue"
          id="459295"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436296</attachid>
            <date>2021-08-24 09:40:59 -0700</date>
            <delta_ts>2021-08-24 15:00:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210824094058.patch</filename>
            <type>text/plain</type>
            <size>331983</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi40MWQ0ODE1ZTdjMmI1MjIy
Yjg4ZTYzN2FjZjFiZGI1ODMxNjZkZTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDEgQEAKKzIwMjEtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFw
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1
dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQ
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4
aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1
cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rp
b24pOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAq
IGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpkaXJlY3RQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsT3B0aW1pemUp
OgorICAgICAgICAoSlNDOjpkaXJlY3RQdXRCeVZhbE9wdGltaXplKToKKyAgICAgICAgKEpTQzo6
dHJ5UHV0QnlWYWxPcHRpbWl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRyeURpcmVjdFB1
dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRp
Z3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJ
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5Q2Fj
aGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaDoKKwog
MjAyMS0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCBzaG91bGQgbm90IGxvYWQgaW5k
ZXhpbmdUeXBlIHVubmVjZXNzYXJpbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YWRkNmNiNDMyMjkyN2YyMjE1YTYzMmQzODkzYmRjOWMzODI1ZmE3YS4uMzIzZDhhNDBlMWY2ZTIz
ZmNlMjdlZDdjMDhkYjUzMjQ3M2IyNmE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQ2NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUUxNENBN0RD
NTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk2MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQ
dXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTNC
NEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8q
IFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNp
dFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFCRDFCNDg3QTc3MDBD
MzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjMwMzYxRDQxOTJDMzAw
NTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsMTEgKzI4NjYsMTEgQEAKIAkJMEY5MzMyOTQxNENB
N0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRCeVN0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJ
ZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlk
U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOUExNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
MzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlTdGF0dXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1
dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1
dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTgx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlWYXJpYW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFy
aWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeVZhcmlhbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBOUYxREY3ODYwNzAwRTA2RkJEIC8q
IFZpc2l0UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
aXNpdFJhY2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFBMDFE
Rjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODY5NSwxMCArODY5NSwxMCBAQAogCQkJCTBGRDNF
NDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovLAogCQkJCTBGMTVD
RDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwICovLAogCQkJCTBGMTVDRDIx
MUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RD
MTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzQjRBNzE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3
OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjND
NiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
VmFyaWFudC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFy
aWFudC5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8s
CiAJCQkJMEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuY3BwICov
LAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8s
CkBAIC0xMDUwNiw4ICsxMDUwNiw4IEBACiAJCQkJNzkxNjBEQkUxQzhFM0VDODAwOEMwODVBIC8q
IFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcy
RDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFG
RkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTNCNEFB
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFBy
b3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5k
ZXggYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1OWMzMDIwZC4uNzA3N2VmOWFlMzEx
NzZmNjM4NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dApAQCAtMjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiBieXRl
Y29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2Uu
Y3BwCiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAotYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAK
K2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3Bw
CiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCmluZGV4IGZhOGI2YjIyZTNhNGUyZGM5NTBjN2JiMjQ2OTdlNjk4MjgwYzM1YjYuLjJjY2Qz
NTYzODMwNDlkNzhmYzI2OWJmMDU1YjJjMjExNmU0N2NiYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTk5LDYgKzk5LDE5IEBAIFJlZjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIENhY2hlCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4
ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNh
c2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghcHJvdG90eXBlQWNjZXNzQ2hhaW4pOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgpAQCAtMjcyLDYgKzI4NSwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6Omd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrU2tpcHBpbmdDb25zdGFudElkZW50aWZpZXJDaGVjaygpIGNvbnN0
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAg
IGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjYsNiArMzUyLDE5IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJZGVudGlmaWVyTmFtZU1hdGNoKCkgY29uc3QKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJ
bmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM3OCw2ICs0MTcsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjaygpIGNvbnN0CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xh
bXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyNSwxMSArNDc3LDI0IEBAIGJvb2wg
QWNjZXNzQ2FzZTo6bmVlZHNTY3JhdGNoRlBSKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDE2TG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxv
YWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtNTE1LDYgKzU4MCwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmZvckVh
Y2hEZXBlbmRlbnRDZWxsKFZNJiB2bSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdl
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAg
LTU2OSw2ICs2NDcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoVk0mIHZtLCBWZWN0
b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrSWZEb2VzQ2FsbHMpIGNvbnMKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGRvZXNDYWxscyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFJlcGxhY2U6CkBAIC02NTAsNiArNzQxLDE5IEBAIGJvb2wgQWNjZXNzQ2Fz
ZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBvdGhlci50eXBlKCkgPT0gdHlwZSgp
OwogCiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7CkBAIC05NjEsNiArMTA2NSw4IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQ
Uik7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xMDYwLDYgKzExNjYsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9w
ZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZv
R1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTEx
NDUsNiArMTI1Myw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtMTE5OSwxNSArMTMwOSwxNCBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBpc091dE9mQm91bmRzOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNF
bXB0eTsKLQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJ
bmZvLnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNl
UmVncygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2Fy
cmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhz
Y3JhdGNoR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xMjI3LDE2ICsxMzM2
LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIp
KTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0
Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gz
R1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1w
dHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hH
UFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRj
aDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKQEAgLTEyNjIsMjEgKzEzNzEsMjEg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgICAgIHByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgICAg
ICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIHN0YXRlLnNjcmF0Y2hGUFIp
OwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRj
aEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElm
TmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAgICAgICAgICBqaXQuYm94RG91YmxlKHN0
YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Vp
Z2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkg
PSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxz
ZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFs
dWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgaXNFbXB0
eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBmYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUikpOwogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkp
OwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzk1LDI3MyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwog
Ci0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHko
KSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworICAgICAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVu
ZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5k
ZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3Jl
OiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMgY29kZSBp
cyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ug
b3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnBy
b3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNoZWNrIGRvbmUgaW4gcG9seW1vcnBoaWMg
YWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUp
KSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
YWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlOworCisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAgICAgYXV0byBwcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworICAgICAgICB9OworCisg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1bHQ7CisgICAgICAgIGlmIChtX3R5
cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7CisgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworCisgICAg
ICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOworCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpaZXJvLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSkpOworI2Vsc2UK
KyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
UiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKworICAgICAgICAgICAgc3RvcmVSZXN1
bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAg
ICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBzdG9y
ZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7Cisg
ICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBq
aXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOYU4oc3Rh
dGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9w
ZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBw
ZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
ICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBlbWl0
dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAo
bV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgewogICAgICAgICAgICAgaXNPdXRP
ZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOworICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkpOworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKworICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMkdQUik7CisgICAgICAg
ICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5z
dWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5m
by5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZk1h
eVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBqaXQuanVt
cCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAhZmFpbEFuZElnbm9yZS5lbXB0eSgp
KSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0
YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5k
KGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgLy8gVGhpcyBj
b2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUg
YmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRv
VHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBz
dGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHR5cGVGb3JU
eXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2
YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0
eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IElu
dmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3VibGVDYXNlID0gaml0LmJyYW5jaElm
Tm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
IGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgZG91YmxlQ2FzZS5saW5rKCZq
aXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwor
ICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0Rv
dWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyNlbHNlCisgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOwor
I2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgLy8gT3V0T2ZC
b3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIGZ1
bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOwor
CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNl
ZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkp
OworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0
dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hH
UFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAgICAgICBzY3JhdGNoM0dQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdl
Q29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBz
Y3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQz
MlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUp
KSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCgh
SlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gaW5Cb3Vu
ZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIHNjcmF0Y2gzR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgYXV0
byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwgc2NyYXRj
aDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAg
ICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZq
aXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJH
UFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGlt
ZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAg
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0
KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91cikpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCisg
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJl
c2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygp
KTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykK
ICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAg
ICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIAogICAgICAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xODk0
LDggKzIyNjIsMTIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7Cisg
ICAgICAgIGlmIChzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSkKKyAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
c3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVBy
b2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRj
aEdQUik7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKQEAg
LTIwNTgsNiArMjQzMCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwog
ICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAg
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAg
IGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAg
ICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5k
OjpQcm9wZXJ0eURlbGV0aW9uKTsKQEAgLTIxODMsNiArMjU1NywxOSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2Fk
OgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1
b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0
ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKICAgICAgICAgLy8g
YWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUo
KSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAgICAgICAvLyBhcmUgbm90IGd1YXJk
ZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIgKzI1ODMsMzEgQEAgVHlwZWRBcnJh
eVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CiAgICAgICAg
IHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlw
ZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKICAgICAgICAgcmV0dXJu
IFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDE2
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MzI7CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyODQsNiArMjY4MCwxOSBAQCBib29s
IEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vzc0Nhc2UmIGxocywgY29uc3QgQWNj
ZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAg
ICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNlIEluc3RhbmNlT2ZHZW5lcmljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0YTk2MjExMDUwODk5YmFkZmQ5YmUu
LjU2M2ExNTUyYWU0MjE2NDQwNDZkMGFhNDFkMjNiNmFkZDVkYjY1NTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMTI4LDcgKzEyOCwyMCBAQCBj
bGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFjY2Vzc0Nhc2U+
IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkLAogICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAgICAgICBJbmRleGVkU3RyaW5nTG9h
ZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWREb3VibGVTdG9y
ZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwKKyAgICAgICAgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSwKKyAgICAg
ICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUs
CisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUsCisgICAgICAgIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAKICAgICBlbnVtIFN0YXRlIDogdWlu
dDhfdCB7CkBAIC0zNTMsMTIgKzM2NiwxMyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAg
ICAgICAgc3RydWN0IEtleSB7CiAgICAgICAgICAgICBLZXkoKSA9IGRlZmF1bHQ7CiAKLSAgICAg
ICAgICAgIEtleShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgZXh0cmFH
UFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgUG9seW1v
cnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkKKyAgICAgICAgICAgIEtleShHUFJS
ZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgZXh0cmFHUFIsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cywgUG9seW1vcnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkKICAgICAgICAgICAg
ICAgICA6IG1fd3JhcHBlZCh3cmFwcGVkKQogICAgICAgICAgICAgICAgICwgbV9iYXNlR1BSKGJh
c2VHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3ZhbHVlR1BSKHZhbHVlR1BSKQogICAgICAgICAg
ICAgICAgICwgbV9leHRyYUdQUihleHRyYUdQUikKICAgICAgICAgICAgICAgICAsIG1fc3R1Yklu
Zm9HUFIoc3R1YkluZm9HUFIpCisgICAgICAgICAgICAgICAgLCBtX2FycmF5UHJvZmlsZUdQUihh
cnJheVByb2ZpbGVHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJl
Z2lzdGVycykKICAgICAgICAgICAgIHsgfQogCkBAIC0zNzUsNiArMzg5LDcgQEAgY2xhc3MgU2hh
cmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAgICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBi
Lm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9l
eHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0
dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAgICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0g
Yi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lz
dGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgICAgIH0KIApAQCAtMzgzLDYgKzM5
OCw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgR1BSUmVnIG1fdmFs
dWVHUFI7CiAgICAgICAgICAgICBHUFJSZWcgbV9leHRyYUdQUjsKICAgICAgICAgICAgIEdQUlJl
ZyBtX3N0dWJJbmZvR1BSOworICAgICAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9maWxlR1BSOwog
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgICAgICB9OwogCkBA
IC00MTYsNiArNDMyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAg
ICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAg
ICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAm
JiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAg
ICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAg
ICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVycykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yZGVyaW5nIG9mIGNhc2VzIGRvZXMg
bm90IG1hdHRlciBmb3Igc2hhcmluZyBjYXBhYmlsaXRpZXMuCiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSBzdWNjZXNzIHJhdGUgYnkgbWFraW5nIHRo
aXMgY29tcGFyaXNvbiAvIGhhc2hpbmcgbm9uIG9yZGVyaW5nIHNlbnNpdGl2ZS4KQEAgLTQ0NSw2
ICs0NjIsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgR1BSUmVnIG1fdmFs
dWVHUFI7CiAgICAgICAgIEdQUlJlZyBtX2V4dHJhR1BSOwogICAgICAgICBHUFJSZWcgbV9zdHVi
SW5mb0dQUjsKKyAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9maWxlR1BSOwogICAgICAgICBSZWdp
c3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIGNvbnN0IEZpeGVkVmVjdG9yPFJlZlB0
cjxBY2Nlc3NDYXNlPj4mIG1fY2FzZXM7CiAgICAgICAgIGNvbnN0IEZpeGVkVmVjdG9yPFN0cnVj
dHVyZUlEPiYgbV93ZWFrU3RydWN0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BcnJheVByb2ZpbGUuaAppbmRleCA2ZGM3YjBlNTQ0N2ZlMDYwZGJjYmQyNGQ5OTA5NzU2
NTc5ZmM2NTc0Li45MWRhOGYzZWZmOTJmYzNhODk1NzBkNzVhNGI5MTNiZDI2MzJjYzRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCkBAIC0yMDgs
NiArMjA4LDkgQEAgY2xhc3MgQXJyYXlQcm9maWxlIHsKICAgICBBcnJheU1vZGVzKiBhZGRyZXNz
T2ZBcnJheU1vZGVzKCkgeyByZXR1cm4gJm1fb2JzZXJ2ZWRBcnJheU1vZGVzOyB9CiAgICAgYm9v
bCogYWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiAmbV9tYXlTdG9yZVRvSG9sZTsg
fQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5UHJvZmlsZSwgbV9tYXlTdG9yZVRvSG9sZSk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCk7IH0K
KwogICAgIHZvaWQgc2V0T3V0T2ZCb3VuZHMoKSB7IG1fb3V0T2ZCb3VuZHMgPSB0cnVlOyB9CiAg
ICAgYm9vbCogYWRkcmVzc09mT3V0T2ZCb3VuZHMoKSB7IHJldHVybiAmbV9vdXRPZkJvdW5kczsg
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCmluZGV4IDc2NzFkODdiMWVhNzQ5ZGMzNDU2Zjc3NjVh
YzA2YzRhOGJjZmIyYjEuLmMwMjVhN2JmNjUxOTRiZGE0ZTgyMTUxZDljYjNmMjk2NzhkYTkyNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5jcHAKQEAgLTE0MSw2ICsxNDEsOCBAQCB2b2lkIEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSwgY29ucwogICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgaWYgKHN0dWJJbmZv
Lm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSKTsKICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKIAogICAg
IEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAppbmRleCBmYTBhNmQ1MjNiN2FkMGRmODgyMTEw
N2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAyNTk2YmY2ZWE4ZmY5YThhNzJiNGRjMmExZDE4
OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNN
YXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaApA
QCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlua1N0YXR1czsKIGNsYXNzIENvZGVCbG9jazsK
IGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5CeVN0YXR1czsKLWNsYXNzIFB1dEJ5SWRTdGF0
dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNzIERlbGV0ZUJ5U3RhdHVzOwogY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJbmZvOwpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1
Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsU3RhdHVzIHsgbnVsbHB0ciB9
OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAgSW5CeVN0YXR1
cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAgUHV0QnlJZFN0YXR1cyogcHV0U3RhdHVzIHsg
bnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBwdXRTdGF0dXMgeyBudWxscHRyIH07CiAgICAg
RGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7IG51bGxwdHIgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKaW5kZXggNDg0MTAx
MzlkYzJmOGMwZDVjODBhMmZmOTA1YzNhYTZhMTM1ZGZiMi4uYzFlYjJkNjlkMjc1NGUwNTFhODI1
OWY2Mzc3ZTY0NzE0ZWVhZWU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAKQEAgLTIxNiw4ICsyMTYsMTIgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3RlcihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCiAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVRhZ0dQUik7CiAgICAgYWxsb2Nh
dG9yLmxvY2soc3R1YkluZm8udmFsdWVUYWdHUFIpOwogI2VuZGlmCisgICAgaWYgKHN0dWJJbmZv
LnByb3BlcnR5UmVncygpKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0
eVJlZ3MoKSk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJl
ZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAg
aWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBHUFJSZWcg
c2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICBpZiAoYWxsb2Nh
dG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAKaW5kZXggODEwNGEyZjMxZDkxMzEwYzNkMzhlMzNhZGQxZmZlNjYyNzVkOTExNC4uNDBk
NmExZjlkYTU4MjUyMDU1NGFhYzM0ZWMxYTQ0ZTQyOWFmODY0MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC00OTQs
NiArNDk0LDggQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVn
ZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICNlbmRpZgogICAgIGlmIChzdHVi
SW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5m
by5tX2FycmF5UHJvZmlsZUdQUik7CiAKICAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC04MTAsNiArODEyLDcgQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25j
dXJyZW50SlNMb2MKICAgICAgICAgICAgIHN0dWJJbmZvLnZhbHVlR1BSLAogICAgICAgICAgICAg
c3R1YkluZm8ucmVncy50aGlzR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ubV9zdHViSW5mb0dQ
UiwKKyAgICAgICAgICAgIHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLAogICAgICAgICAgICAg
c3R1YkluZm8udXNlZFJlZ2lzdGVycywKICAgICAgICAgICAgIGtleXMsCiAgICAgICAgICAgICB3
ZWFrU3RydWN0dXJlcywKQEAgLTg0Niw3ICs4NDksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
YwogCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgaWYgKGNhbkJl
U2hhcmVkKQotICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRTdHVicy0+YWRkKFNoYXJlZEpJVFN0
dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBzdHViSW5mby52YWx1ZUdQUiwgc3R1
YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBzdHViSW5mby51c2Vk
UmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CisgICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJz
LT5hZGQoU2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJ
bmZvLnZhbHVlR1BSLCBzdHViSW5mby5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsIHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBz
dHViLmdldCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZpbmlzaENvZGVHZW5lcmF0aW9uKFdU
Rk1vdmUoc3R1YikpOwpAQCAtMTAyMiw2ICsxMDI1LDQ1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDoKICAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
U3RyaW5nTG9hZCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRl
eGVkSW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkSW50MzJTdG9yZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU6
CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZERvdWJsZVN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgICAg
IG91dC5wcmludCgiSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgICAgICBvdXQu
cHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgorICAg
ICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlIik7CisgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWFmYWI5ZDM5YzdhNGVhNmU2MWNmNTY0OGFlZmFj
OTBjMWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKLSNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuIGFwcGVuZElDU3Rh
dHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVz
OjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOwotfQotCi1Q
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKLSAgICAKLSAg
ICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgbm90IHlldCB1c2luZyBgY29t
cHV0ZUZyb21MTEludGAgaW4gYW55IHBsYWNlIGZvciBgcHV0X3ByaXZhdGVfbmFtZWAuCi0gICAg
Ly8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVy
ZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0gICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMg
b3BlcmF0aW9uIG9uIExMSW50LgotICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wUHV0UHJp
dmF0ZU5hbWU+KCkpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxl
ZEJsb2NrKTsKLQotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRT
dHJ1Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVjdHVyZUlEKQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1
Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7Ci0gICAg
aWYgKCFuZXdTdHJ1Y3R1cmVJRCkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0
cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgCi0g
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlmICghKGJ5dGVj
b2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRs
eSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0
cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgc3RydWN0
dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJM
RShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
LSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoZGlk
RXhpdCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1
dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywg
dWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBVTlVTRURf
UEFSQU0obWFwKTsKLSAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHJl
dHVybiBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywg
c3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURh
dGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKLX0KLQotUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKLXsKLSAgICBTdHVi
SW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHByb2ZpbGVk
QmxvY2stPnZtKCksIHN0dWJJbmZvKTsKLSAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc3VtbWFyeSk7Ci0gICAgCi0gICAgc3dpdGNo
IChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKLSAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0g
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8gY2FjaGUgYnV0IGZhaWxl
ZCBmb3Igc29tZSByZWFzb24uCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2U6IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAg
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKLSAgICAgICAgCi0gICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBs
ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+
YXQoaSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAg
ICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFjY2Vz
c0Nhc2U6OlJlcGxhY2U6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICB2
YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlv
bjogewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAg
ICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBs
ZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1h
cnkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpj
YWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2Fs
bEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVy
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9m
ZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwotICAgICAgICAgICAgICAgIH0gfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKLSAgICAgICAg
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgfQotfQotCi1QdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2Nr
LCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0
U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsK
LSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEg
PSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRl
Y29kZUluZGV4KTsKLSAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShi
YXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLQotICAgIGZvciAoSUNTdGF0dXNDb250ZXh0
KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7Ci0gICAgICAgIElDU3RhdHVzIHN0YXR1cyA9IGNv
bnRleHQtPmdldChjb2RlT3JpZ2luKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gYmxlc3MgPSBb
Jl0gKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlJZFN0YXR1cyB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewotICAgICAgICAg
ICAgICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAotICAgICAg
ICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwg
dWlkLCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsKLSAg
ICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5zbG93VmVyc2lvbigpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKLSAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0
YXR1cy5zdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxl
c3MocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5wdXRT
dGF0dXMpCi0gICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1h
cCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgaWYgKHNldC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0gICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX3N0YXRlID0g
U2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgp
ICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAg
IGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZh
bGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUg
bW9kZQotICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBw
cml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKLSAgICAgICAgICAg
IC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCi0gICAgICAgICAgICBpZiAocHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCi0gICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcwotICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKLSAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgotICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZh
cmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBo
YXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKLSAg
ICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVz
ZSBpdCBtZWFucyB3ZSBhcmUKLSAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGlu
c3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKLSAgICAgICAgLy8gc2xvdyBw
YXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCi0gICAgICAg
IGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAvLyBPdXIgaHlwb3RoZXNpcyBp
cyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhp
cyBpcyByZWFsbHkKLSAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBj
aGVja3MuCi0gICAgCi0gICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBk
aWN0aW9uYXJpZXMuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAg
Ly8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBh
biBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgotICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAg
QVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOwotICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVu
dGx5KAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkKTsK
LSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgfQotICAgIAot
ICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1
cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNl
dCk7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAKLSAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFu
dCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKLSAgICAg
ICAgaWYgKCFkaWRBcHBlbmQpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIFB1dEJ5SWRTdGF0dXM6Om1ha2VzQ2Fs
bHMoKSBjb25zdAotewotICAgIGlmIChtX3N0YXRlID09IE1ha2VzQ2FsbHMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2VzQ2FsbHMoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Ns
b3dQYXRoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFN0
YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjptYXJrSWZDaGVh
cChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6ZmluYWxpemUo
Vk0mIHZtKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRz
KSB7Ci0gICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0
dXM6Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIG90aGVyKQotewotICAgIGlmIChvdGhlci5t
X3N0YXRlID09IE5vSW5mb3JtYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRv
IG1lcmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAgICAgICp0aGlzID0gUHV0QnlJZFN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93
UGF0aCk7Ci0gICAgfTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5v
SW5mb3JtYXRpb246Ci0gICAgICAgICp0aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNp
bXBsZSkKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewot
ICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgY2Fz
ZSBNYWtlc0NhbGxzOgotICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgfQotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotewotICAgIGlmIChtX3N0YXRlICE9
IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92
YXJpYW50cywgc2V0KTsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJp
YW50cykKLSAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnko
KTsKLSAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGUgPSBOb0lu
Zm9ybWF0aW9uOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRp
b246Ci0gICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIG91dC5wcmludCgiKCIsIGxp
c3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
IGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFrZXNDYWxsczoKLSAgICAgICAgb3V0LnBy
aW50KCIoTWFrZXNDYWxscykiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGUyNTJkYjY5YWM1NzEzZGM4ZThmOGI2NDQwMDBj
YWU2MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1
cy5oIgotI2luY2x1ZGUgIkV4aXRGbGFnLmgiCi0jaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKLSNp
bmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQu
aCIKLSNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENvZGVCbG9jazsKLWNsYXNzIFZNOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBT
dHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKLQotY2xhc3MgUHV0QnlJZFN0YXR1
cyBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51
bSBTdGF0ZSB7Ci0gICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1h
dGlvbi4KLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMg
YSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgotICAgICAgICBTaW1wbGUsCi0gICAgICAgIC8v
IEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCi0gICAgICAgIFRha2VzU2xvd1Bh
dGgsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMu
Ci0gICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoKQot
ICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwg
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxscyk7Ci0gICAg
fQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1h
cnkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKLSAgICAgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAgICAgICBtX3N0YXRlID0gTm9JbmZv
cm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1h
cnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0g
ICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICAKLSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotICAg
ICAgICA6IG1fc3RhdGUoU2ltcGxlKQotICAgIHsKLSAgICAgICAgbV92YXJpYW50cy5hcHBlbmQo
dmFyaWFudCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0gICAg
c3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZh
dGVGaWVsZFB1dEtpbmQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElD
U3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOwotI2VuZGlmCi0gICAgCi0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUg
PT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIFB1dEJ5
SWRTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKLSAgICAKLSAgICBzaXplX3QgbnVtVmFyaWFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3Rv
cjxQdXRCeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50
czsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3Im
KTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBtZXJnZShjb25zdCBQ
dXRCeUlkU3RhdHVzJik7Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2
YXRlOgotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotI2VuZGlmCi0gICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSAgICAKLSAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0
QnlJZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgCi0gICAgU3RhdGUg
bV9zdGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU0
ZDY0NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEzODcyNTUyMWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgotCi0jaW5jbHVkZSAiQ2Fs
bExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKLSAgICA6IFB1dEJ5SWRWYXJpYW50KCkKLXsKLSAgICAqdGhpcyA9IG90aGVyOwot
fQotCi1QdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRC
eUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgbV9raW5kID0gb3RoZXIubV9raW5kOwotICAgIG1f
b2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7Ci0gICAgbV9uZXdTdHJ1Y3R1cmUg
PSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29u
ZGl0aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Ci0gICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBtYWtlVW5pcXVl
PENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwotICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnRyYW5zaXRpb24oCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247Ci0gICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwotICAgIHJlc3VsdC5tX25ld1N0cnVj
dHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCi17Ci0gICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7Ci0gICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwotICAgICAgICBpZiAo
c3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUo
KSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgIG1f
a2luZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKLX0KLQot
Ym9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgY2FzZSBTZXR0ZXI6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgY2FzZSBTZXR0
ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25z
dAotewotICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwotfQotCi1ib29sIFB1dEJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAg
aWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgTm90U2V0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAg
ICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90
aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7Ci0gICAgICAgICAgICBpZiAobmV3VmFy
aWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZSgqdGhpcykpIHsKLSAgICAg
ICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAgIGNhc2UgUmVwbGFjZToKLSAgICAg
ICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShvdGhlcik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7Ci0gICAgICAgICAgICBp
ZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9uZXdTdHJ1
Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0
aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOwotICAgICAgICAgICAgICAg
IGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb25kaXRpb25TZXQg
PSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6IHsKLSAgICAgICAgaWYg
KG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKSB7Ci0gICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3RhdHVzICYmIG90aGVyLm1fY2Fs
bExpbmtTdGF0dXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSAhPSBvdGhlci5t
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25T
ZXQ7Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1f
Y29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFs
aWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uZGl0
aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCi0gICAgICAgICAgICBtX2NhbGxMaW5rU3RhdHVzLT5tZXJnZSgqb3RoZXIu
bV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIAotICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJn
ZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQot
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRo
UmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSkKLXsKLSAgICBBU1NFUlQobV9r
aW5kID09IFRyYW5zaXRpb24pOwotICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNl
KTsKLSAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7Ci0gICAgQVNTRVJU
KCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxs
b2NhdGVzU3RvcmFnZSgpKTsKLSAgICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0Vt
cHR5KCkpOwotICAgIAotICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hl
biB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAot
ICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdh
cyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKLSAgICAvLyB3b3JrIGlmIHdl
IG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBv
bHltb3JwaGljLgotICAgIAotICAgIGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlT
dHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUHV0QnlJZFZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9vbGRTdHJ1Y3R1cmUu
bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgaWYgKG1fbmV3U3RydWN0dXJlKQotICAgICAgICBt
X25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQg
UHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBs
YXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJv
b2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKLXsKLSAgICBpZiAoIW1fb2xkU3Ry
dWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
dm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgJiYg
IW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwotfQot
Ci12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAg
Y2FzZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgb3V0LnByaW50KAotICAg
ICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAi
LCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIG91dC5wcmludCgKLSAgICAgICAg
ICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiB0byAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwg
Y29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjoKLSAgICAgICAgb3V0LnByaW50KAot
ICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwg
Il0iKTsKLSAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICAg
ICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIG91
dC5wcmludCgiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhNzVhNzNhMmY4ZDRiNWU1ZjBhMWRlNDA4YTVmYmJkMWNiN2Fi
MjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rU3RhdHVzOwot
Ci1jbGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZW51bSBLaW5kIHsKLSAgICAgICAgTm90U2V0LAotICAgICAgICBSZXBsYWNl
LAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBTZXR0ZXIKLSAgICB9OwotICAgIAotICAg
IFB1dEJ5SWRWYXJpYW50KCkKLSAgICAgICAgOiBtX2tpbmQoTm90U2V0KQotICAgICAgICAsIG1f
b2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJp
YW50Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFu
dCYpOwotCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0
cmFuc2l0aW9uKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4pOwotICAgIAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkg
IT0gTm90U2V0OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQo
KTsgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0g
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQm
IG9sZFN0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsK
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1
Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVj
ZXNzYXJ5KCk7Ci0KLSAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKLSAgICBib29s
IHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwotICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OwotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIC8vIFdlIGRv
bid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYg
d2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBJbnRy
aW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9JbnRyaW5zaWM7IH0KLQotICAgIC8v
IFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVycy4KLSAgICBib29sIGlzUHJvcGVy
dHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlu
a1N0YXR1cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7
Ci0gICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOwotICAgIH0KLQotICAgIGJv
b2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKTsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
LSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90
aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVy
LnN0cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBhdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFjZSk7
Ci0gICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0g
ICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1
Y3R1cmUgeyBudWxscHRyIH07Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25k
aXRpb25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5r
U3RhdHVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTViMDljOGE1ZTkxM2Q3
N2VkZWI3M2U2ZjFkNjI1ZmMyZGYyZThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApAQCAtMCwwICsxLDU0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgorCisjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGxleEdl
dFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRl
ICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgUHV0
QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorewor
ICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9
CisKK3ZvaWQgUHV0QnlTdGF0dXM6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX3ZhcmlhbnRzLnNo
cmlua1RvRml0KCk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxM
SW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQoreworICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CisgICAgCisgICAgYXV0byBp
bnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpOworCisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGNhc2Ugb3BfcHV0X3ByaXZhdGVfbmFtZToK
KyAgICAgICAgLy8gV2UgZG8gbm8gaGF2ZSBhIGNvZGUgcmV0cmlldmluZyBMTEludCBpbmZvcm1h
dGlvbiBmb3IgYG9wX3B1dF9wcml2YXRlX25hbWVgLgorICAgICAgICAvLyBXZSBjYW4gYWRkIHN1
cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJlIGNoYW5nZXMsIHNpbmNl
IHdlIGhhdmUKKyAgICAgICAgLy8gSUMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9u
IExMSW50LgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAg
ZGVmYXVsdDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShwcm9maWxlZEJsb2NrKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gJihw
cm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci0+aW1wbCgpOworCisgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOworICAgIGlmICghc3Ry
dWN0dXJlSUQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChzdHJ1Y3R1cmVJRCk7CisKKyAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1l
dGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CisgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgeworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgc3RydWN0dXJlLCBvZmZzZXQpOworICAg
IH0KKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkp
IHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwg
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gUHV0QnlWYXJpYW50
Ojp0cmFuc2l0aW9uKG51bGxwdHIsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorUHV0QnlTdGF0dXM6OlB1dEJ5U3Rh
dHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5v
SW5mb3JtYXRpb246CisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKKyAgICBjYXNlIFN0dWJJ
bmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Ns
b3dQYXRoOgorICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8udG9va1Nsb3dQYXRoID8gT2JzZXJ2
ZWRUYWtlc1Nsb3dQYXRoIDogTGlrZWx5VGFrZXNTbG93UGF0aDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAg
ICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2VydmVkU2xvd1BhdGhB
bmRNYWtlc0NhbGxzIDogTWFrZXNDYWxsczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQoreworICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBVTlVTRURf
UEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkaWRFeGl0KQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5m
bzsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAg
IGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJs
b2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8g
RU5BQkxFKEpJVCkKKyAgICBVTlVTRURfUEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0oZGlk
RXhpdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOworICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIHJldHVybiBj
b21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1Yklu
Zm8sCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5l
QmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7Cisg
ICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShw
cm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7CisgICAgaWYgKCFpc0lubGluZWFibGUoc3Vt
bWFyeSkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhzdW1tYXJ5LCAqc3R1YkluZm8pOwor
ICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7CisgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRv
IGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgCisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQorICAgICAgICAg
ICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAgICAKKyAgICAg
ICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7
CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZv
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShhY2Nl
c3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRC
eVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJlLCBvZmZzZXQp
OworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0
aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oYWNjZXNz
LmlkZW50aWZpZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCks
IGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1
czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgYWNjZXNzLnVp
ZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhH
ZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Ns
b3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4o
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
YWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFy
aWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVy
ZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25T
ZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZv
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnNo
cmlua1RvRml0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2Vs
aW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxs
RXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxp
bmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENh
Y2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKElD
U3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgeworICAgICAgICBJQ1N0YXR1
cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CisgICAgICAgIAorICAgICAgICBh
dXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeVN0YXR1
cyB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2RlT3JpZ2luKSkgewor
ICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigK
KyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2Rl
SW5kZXgsIGRpZEV4aXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwor
ICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgeworICAgICAg
ICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0
YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJl
c3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMucHV0U3RhdHVz
KQorICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5
dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOworfQorCitQdXRCeVN0YXR1
cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBi
b29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCit7
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgaWYg
KHBhcnNlSW5kZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKworICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoKTsKKyAgICAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
UHV0QnlTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAoIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFsaWQgb2Zm
c2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBtb2RlCisg
ICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHByaXZhdGUg
ZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAorICAgICAgICAgICAgLy8gc2xv
dyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIGlmIChwcml2YXRlRmllbGRQ
dXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExp
a2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Ns
b3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFj
ZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3Jl
YXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KKyAgICAgICAg
ICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1
dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAgICAgICAgICAgICAgLy8gZ29pbmcg
b24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJv
bSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4g
aWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3ku
CisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtl
IHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2
YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50aWZpZXIsIHN0cnVjdHVyZSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4gaGF2
ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0CisgICAg
ICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1c2Ug
aXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBpbnN0
YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCisgICAgICAgIC8vIHNsb3cgcGF0
aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgorICAgICAgICBp
ZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgIC8vIE91ciBoeXBvdGhlc2lz
IGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0
aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5
IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9u
IGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAg
ICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBp
c24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKKyAgICAgICAgLy8gd2UgZG9uJ3Qg
d2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgICAgICBpZiAoIXN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKKyAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
c0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAg
ICAgICB9CisgICAgCisgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUs
IHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgICAgICBBU1NFUlQo
aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSBy
ZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oaWRlbnRpZmllciwg
c3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICBp
ZiAoIWRpZEFwcGVuZCkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0LnNocmlua1RvRml0KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIFB1dEJ5U3RhdHVzOjptYWtlc0NhbGxz
KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRp
b246CisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgT2JzZXJ2ZWRUYWtl
c1Nsb3dQYXRoOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNYWtlc0NhbGxzOgor
ICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgU2ltcGxlOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtl
c0NhbGxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB9Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3Rh
dHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKG9ic2VydmVkU3RydWN0dXJlU3R1
YkluZm9TbG93UGF0aCgpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygp
ID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBPYnNlcnZlZFRha2VzU2xvd1BhdGgp
OworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogTGlr
ZWx5VGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlkZW50aWZpZXIgUHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaW5nbGVJZGVudGlmaWVy
Rm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+
Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAg
IHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dS
RUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBQ
dXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1
dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQubWFya0lm
Q2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNo
ZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmZpbmFsaXplKFZN
JiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsK
KyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6Om1l
cmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIubV9zdGF0ZSA9
PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG1lcmdlU2xvdyA9
IFsmXSAoKSB7CisgICAgICAgIGlmIChvYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgo
KSB8fCBvdGhlci5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAgICAg
ICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxz
KCkpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBPYnNlcnZlZFRha2VzU2xvd1Bh
dGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKyAgICB9OworCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBO
b0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAgICBzaHJpbmtUb0ZpdCgpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAg
ICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAg
Y2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIG1lcmdl
U2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7
CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVy
SUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOworICAgIGZvciAoUHV0QnlWYXJpYW50
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9uVG9S
ZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgi
KCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIkxpa2VseVRha2VzU2xv
d1BhdGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRo
OgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkVGFrZXNTbG93UGF0aCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIk1ha2VzQ2Fs
bHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2Vz
Q2FsbHM6CisgICAgICAgIG91dC5wcmludCgiT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0NjhhMjg2ZWI1ZmI3
MWY5MTdiODA4NGNjZGNhMGY0YTIyOGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiRXhpdEZsYWcuaCIK
KyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQu
aCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnku
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFZNOworY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1Y3R1cmVDaGFp
bjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdp
biwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5m
b01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJdCdzIHVuY2Fj
aGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3JtYXRpb24sCisg
ICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAg
ICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtlIHRoZSBzbG93IHBh
dGguCisgICAgICAgIExpa2VseVRha2VzU2xvd1BhdGgsCisgICAgICAgIC8vIEl0J3Mga25vd24g
dG8gdGFrZSBzbG93IHBhdGguIFdlIGFsc28gb2JzZXJ2ZWQgdGhhdCB0aGUgc2xvdyBwYXRoIHdh
cyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgT2JzZXJ2ZWRUYWtlc1Nsb3dQ
YXRoLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtlIHRoZSBzbG93IHBhdGggYW5kIHdp
bGwgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscywKKyAgICAgICAgLy8gSXQga25vd24g
dG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuIFdlIGFsc28gb2JzZXJ2ZWQgdGhhdCB0aGUg
c2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgT2JzZXJ2
ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMsCisgICAgfTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cygp
CisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKKyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgc3dpdGNoIChtX3N0YXRl
KSB7CisgICAgICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgY2FzZSBMaWtlbHlUYWtl
c1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICAgICAg
Y2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0Nh
bGxzOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdHViSW5m
b1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgUHV0QnlTdGF0dXMoY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQorICAg
IHsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwg
Qnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwor
ICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
U3RydWN0dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0
ZUZpZWxkUHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3Rh
dHVzQ29udGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0
YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVP
cmlnaW4pOworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
IT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBjYXNlIExpa2Vs
eVRha2VzU2xvd1BhdGg6CisgICAgICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7
CisgICAgUHV0QnlTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKKyAgICBib29sIG9ic2VydmVk
U3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gT2Jz
ZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2Vz
Q2FsbHM7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeVZhcmlhbnQsIDE+JiB2
YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRCeVZh
cmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07
IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNpbmdsZUlk
ZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
KyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBtZXJnZShjb25zdCBQdXRC
eVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1Yklu
Zm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyNlbmRpZgorICAgIHN0YXRpYyBQ
dXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwor
ICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICB2
b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8
UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIwN2M1MzViMzc0MDQ4MTA5ZTY5YzkwYWQ4YzlhOWZmMjk0ODdjMjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNw
cApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlh
bnQuaCIKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworUHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50
JiBvdGhlcikKKyAgICA6IFB1dEJ5VmFyaWFudChvdGhlci5tX2lkZW50aWZpZXIpCit7CisgICAg
KnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlWYXJpYW50JiBQdXRCeVZhcmlhbnQ6Om9wZXJhdG9y
PShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIG1fa2luZCA9IG90aGVyLm1fa2lu
ZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOworICAgIG1fbmV3
U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CisgICAgbV9jb25kaXRpb25TZXQgPSBv
dGhlci5tX2NvbmRpdGlvblNldDsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAg
IGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0g
bWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAg
IGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgbV9pZGVudGlm
aWVyID0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIHJldHVybiAqdGhpczsKK30KKworUHV0QnlW
YXJpYW50IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICBy
ZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnRyYW5zaXRpb24oQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBQdXRCeVZhcmlhbnQg
cmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0
aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50OjpzZXR0ZXIoQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5r
U3RhdHVzKQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7
CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owor
ICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1
cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0
cnVjdHVyZSogUHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZvciAodW5zaWduZWQg
aSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1f
bmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFB1dEJ5VmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCkK
K3sKKyAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1
Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICBtX2tpbmQgPSBSZXBsYWNlOwor
ICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50
Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAg
IGNhc2UgVHJhbnNpdGlvbjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQ
dXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHV0QnlWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4ga2luZCgp
ID09IFNldHRlcjsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0
IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEhb3Ro
ZXIubV9pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9pZGVu
dGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgTm90
U2V0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJUKG90aGVy
Lm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0
aW9uOiB7CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOworICAg
ICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxh
Y2UoKnRoaXMpKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBUcmFuc2l0aW9uOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBj
YXNlIFJlcGxhY2U6CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9u
V2l0aFJlcGxhY2Uob3RoZXIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjogeworICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0
dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYg
KCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtZXJnZWRDb25k
aXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0
dGVyOiB7CisgICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwg
b3RoZXIubV9jYWxsTGlua1N0YXR1cykgeworICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0
YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQu
bWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7CisgICAgICAgICAgICBpZiAoIW1lcmdl
ZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90
QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAg
CisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICAgICAgbV9jYWxsTGlua1N0
YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAgICAgICAKKyAgICAgICAg
bV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSkKK3sK
KyAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOworICAgIEFTU0VSVChyZXBsYWNlLm1f
a2luZCA9PSBSZXBsYWNlKTsKKyAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5tX29mZnNl
dCk7CisgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7CisgICAgQVNTRVJU
KCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAgICBBU1NFUlQocmVwbGFjZS5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoaXMgc29ydCBvZiBtZXJnaW5n
IG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFkZCBhIG5l
dyBmaWVsZCB3aGljaAorICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdoaWxlIHRo
ZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNuJ3QKKyAg
ICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0aGUgcmVw
bGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgorICAgIAorICAgIGlmIChyZWFsbG9jYXRlc1N0b3Jh
Z2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXBsYWNlLm1fb2xk
U3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3RydWN0dXJl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgUHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKK0RFRklORV9W
SVNJVF9BR0dSRUdBVEUoUHV0QnlWYXJpYW50KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK3ZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChtX25ld1N0
cnVjdHVyZSkKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwor
fQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90
VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFNsb3RW
aXNpdG9yJik7CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCit7CisgICAg
aWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3U3Ry
dWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRpb25TZXQu
YXJlU3RpbGxMaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2NhbGxM
aW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVs
bHB0cik7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPCIp
OworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciwgIicsICIpOworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiZW1wdHk+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOgorICAgICAg
ICBvdXQucHJpbnQoCisgICAgICAgICAgICAiUmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBvdXQu
cHJpbnQoCisgICAgICAgICAgICAiVHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiB0byAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQo
bmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dCht
X2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwg
Ij4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldHRlcjoKKyAgICAg
ICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25T
ZXQsIGNvbnRleHQpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVz
KTsKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZh
cmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MTQwMmI0MjU2YWRlN2UwNTY1MGE5ZmYwZjY4NDVlYzFiMzFlYjRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua1N0YXR1
czsKKworY2xhc3MgUHV0QnlWYXJpYW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBOb3RTZXQsCisgICAgICAgIFJlcGxh
Y2UsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNldHRlcgorICAgIH07CisgICAgCisg
ICAgUHV0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKKyAgICAgICAg
OiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAg
ICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX2lkZW50aWZpZXIoV1RG
TW92ZShpZGVudGlmaWVyKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFB1dEJ5VmFyaWFudChj
b25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICBQdXRCeVZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQ
dXRCeVZhcmlhbnQmKTsKKworICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgcmVwbGFjZShDYWNoZWFi
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAg
CisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCB0cmFuc2l0aW9uKENhY2hlYWJsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCBzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmllciwg
Y29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPik7CisgICAgCisg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBr
aW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OworICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wgd3JpdGVz
U3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7
CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0
aW9uU2V0OyB9CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBT
ZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9y
IHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJl
dHVybiBOb0ludHJpbnNpYzsgfQorCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRl
ZCBoZWxwZXJzLgorICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAg
CisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtT
dGF0dXMuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRC
eVZhcmlhbnQmIG90aGVyKTsKKyAgICAKKyAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsK
KyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQdXRC
eVZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEh
b3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
IChtX2lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIu
bV9pZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIuc3RydWN0dXJlU2V0
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlv
bldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVwbGFjZSk7CisgICAgCisgICAgS2lu
ZCBtX2tpbmQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgU3RydWN0dXJlU2V0
IG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRy
IH07CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOworICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5jcHAKaW5kZXggMGM0YzA3NDdhMGFiODVmYjNhZjgxN2QyOTQ1ZDYyMWFkYzNlYmFkNy4uZmNl
MGY0ZDhlZTEwZWRkYmNmM2M3NTRlZjgzM2EzNWJlOTdkYmMxOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcApAQCAtNjIsMTAg
KzYyLDEwIEBAIEdldEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRHZXRCeVN0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
ICAgICAKLVB1dEJ5SWRTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5SWRTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlJZFN0YXR1cyYgc3RhdHVz
KQorUHV0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZFB1dEJ5U3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5U3RhdHVzJiBzdGF0dXMpCiB7Ci0gICAg
YXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5SWRTdGF0dXM+KHN0YXR1cyk7Ci0gICAg
UHV0QnlJZFN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOworICAgIGF1dG8gc3RhdHVz
UHRyID0gbWFrZVVuaXF1ZTxQdXRCeVN0YXR1cz4oc3RhdHVzKTsKKyAgICBQdXRCeVN0YXR1cyog
cmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOwogICAgIHB1dHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGNvZGVPcmlnaW4sIFdURk1vdmUoc3RhdHVzUHRyKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBSZWNvcmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0
ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBnZXRzKQog
ICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgZm9yIChh
dXRvJiBwYWlyIDogcHV0cykKKyAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZp
c2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykKICAgICAgICAgcGFpci5zZWNvbmQt
PnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGRlbGV0ZXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0
dXNlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMu
aAppbmRleCBiZDE1NzA1NDU3MzgwYzM3N2I4NDI4NmQ1M2FhODY4YTMyNjMyNGI1Li45NDk4M2Ri
Yzc2N2QwN2UyODA0YmQ0NDJjMzdlYjU0Y2Y0NTdiYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpbmNsdWRlICJEZWxldGVCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAj
aW5jbHVkZSAiSW5CeVN0YXR1cy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVz
ZXMgewogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBhZGRDYWxsTGlua1N0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgQ2FsbExpbmtTdGF0dXMmKTsKICAgICBHZXRCeVN0YXR1cyogYWRk
R2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEdldEJ5U3RhdHVzJik7Ci0gICAg
UHV0QnlJZFN0YXR1cyogYWRkUHV0QnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3Qg
UHV0QnlJZFN0YXR1cyYpOworICAgIFB1dEJ5U3RhdHVzKiBhZGRQdXRCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiwgY29uc3QgUHV0QnlTdGF0dXMmKTsKICAgICBJbkJ5U3RhdHVzKiBhZGRJbkJ5
U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5U3RhdHVzJik7CiAgICAgRGVsZXRl
QnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBEZWxl
dGVCeVN0YXR1cyYpOwogICAgIENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzKiBhZGRDaGVja1ByaXZh
dGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2hlY2tQcml2YXRlQnJhbmRT
dGF0dXMmKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAg
IAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPj4+IGNhbGxzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPEdldEJ5U3RhdHVzPj4+IGdldHM7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxD
b2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlJZFN0YXR1cz4+PiBwdXRzOworICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5U3RhdHVzPj4+
IHB1dHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
SW5CeVN0YXR1cz4+PiBpbnM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6
OnVuaXF1ZV9wdHI8RGVsZXRlQnlTdGF0dXM+Pj4gZGVsZXRlczsKICAgICBWZWN0b3I8c3RkOjpw
YWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDaGVja1ByaXZhdGVCcmFuZFN0YXR1cz4+
PiBjaGVja1ByaXZhdGVCcmFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA3NTkxOGY2NzczMTgzY2RmY2ViMjNk
YzNjYzIxZDMyN2U5ZmExODY4Li5mMjdiNzM3NGVmOWFlZTEwN2E3MDE2ZGE4ODFiY2VkZjc4MTlk
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAKQEAgLTI4MSw4ICsyODEsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6cmVzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sq
IGMKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgogICAgICAgICByZXNldEdl
dEJ5KGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKLSAgICAgICAgcmVzZXRQdXRCeUlEKGNv
ZGVCbG9jaywgKnRoaXMpOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAg
cmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICByZXNldFB1dEJ5
KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKICAgICAgICAgcmVzZXRJbkJ5KGNvZGVCbG9jaywg
KnRoaXMsIEluQnlLaW5kOjpCeUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggNzMwNGZiMTU0ZTg0MGQ4NWRhMjhlNmUy
NTAxYWFiMThlNTVkNDFhNC4uZTY3YmMxMDhiZTMyMGRkNmQyNTllNzdjODFiOWQ1MWM0NWNmNTg0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKQEAgLTU0LDcgKzU0LDggQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90
IHsKICAgICBHZXRCeUlkRGlyZWN0LAogICAgIFRyeUdldEJ5SWQsCiAgICAgR2V0QnlWYWwsCi0g
ICAgUHV0LAorICAgIFB1dEJ5SWQsCisgICAgUHV0QnlWYWwsCiAgICAgSW5CeUlkLAogICAgIElu
QnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC0zNjUsNiArMzY2LDcgQEAgY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm8gewogICAgICAgICBHUFJSZWcgYnJhbmRHUFI7CiAgICAgfSByZWdzOwog
ICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBt
X2FycmF5UHJvZmlsZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUjsKICAgICAvLyBGSVhNRTogWzMyLWJpdHNdIENoZWNr
IGlmIFN0cnVjdHVyZVN0dWJJbmZvOjpiYXNlVGFnR1BSIGlzIHVzZWQgc29tZXdoZXJlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAzNTlkZDMwYzBjZTY4YzExYzE3YjI4
MjEuLjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJOdW1iZXJDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0
YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzk3Myw3ICszOTczLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3RydWN0
dXJlcygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAg
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0gKm1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIo
YmFzZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCkBAIC0zOTgyLDcgKzM5
ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUu
bWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGlmICh0
aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3ICszOTkwLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8vIGVsc2UgdGhpcyBpcyByZWFsbHkg
YSByZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICBu
ZXdTZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxNDAs
MTAgKzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkg
ewogICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVj
dCB8fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZDsKICAgICAgICAgICAgIGF1dG8g
cHJpdmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkID8g
bm9kZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgp
OwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS50b1N0
cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIo
KS51aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCksCiAg
ICAgICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAg
ICAgICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IG5l
d1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYyLDE0ICs0MTYyLDE0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGlmICghYWxsR29vZCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVj
dHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRy
YW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAg
bmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDcz
LDcgKzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgRXhpdE9LOgog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNDY1
MiwxMCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czogeworICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
Ci0gICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVj
dHVyZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnB1dEJ5U3RhdHVzKCkt
PmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRleCBjMjE2YTM5NmQ3MTYwNDIwZGZi
NDgxNWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4MTU5Y2NiMWIxZDM5MzcxNTM4NmI2
NDg2YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQwMiw3ICs0MDIsNyBAQCBjbGFzcyBB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1
czoKQEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAg
ICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJ
bkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4
IDYzZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNiZDYyN2IuLjg2Y2M2ZmFiYjU1Njcx
MWNiNzczNzc4YzlmYzBlNDQ1ZDBlOGY3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3Bv
aW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTc0LDcg
KzczLDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQcml2
YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCi0jaW5jbHVkZSAi
UHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVn
RXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAjaW5j
bHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSArMjM4LDExIEBAIGNsYXNzIEJ5dGVD
b2RlUGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2UoSlNPYmplY3QqIGtub3duQmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7
CiAgICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShOb2RlKiBiYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKLSAg
ICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0aGUgc2V0dGVyIGZvcm0gb2Yg
UHV0QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQg
dGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YXJpYW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJpYW50VHlwZSYpOwogCi0gICAgTm9k
ZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZh
cmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiwgTm9kZSogdmFsdWUpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAg
ICB2b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cyk7
CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVj
dCwgRUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBO
b2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUp
OwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0
dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwg
RUNNQU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCi0gICAgICAg
IE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwgUHJpdmF0ZUZpZWxkUHV0S2lu
ZCk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYsIFByaXZhdGVG
aWVsZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBA
IC00NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAg
ICAgICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUgcHJvcGVydHkuIFdlIGNhbiBvbmx5
IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YKICAgICAgICAgICAgICAgICAv
LyB0aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0
aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAgICAgICAgIC8vIGhpbGFyaW91c2x5
IHJhcmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2UgYXJlIHJlbHlpbmcgb24gc3RydWN0
dXJlU2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQu
IFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5U3RhdHVz
L1B1dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxl
bWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlT
dGF0dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByaWdo
dCBub3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBtb25vIHByb3RvLiBIb3dldmVyLCB0
aGlzIHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1
dHVyZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1Y3R1cmUgZm9yCkBAIC00NTkzLDkg
KzQ1OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICByZXR1cm4gbG9hZGVk
VmFsdWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFs
dWUpCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1ZSkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFj
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpS
ZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKGJhc2UsIG1fZ3JhcGguaWRl
bnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1
cmUoKSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZh
cmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkgKzQ5OTcsMzkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9k
ZSogYmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCi0g
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1
ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgRUNN
QU1vZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29s
IGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBpZiAoaXNEaXJlY3QpCiAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
ZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBhZGRUb0dyYXBoKHB1
dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZv
KGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIGFk
ZFRvR3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZsdXNoIDogUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBi
b29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1v
ZGUpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBC
eXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgaWYg
KCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5
SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1
dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkp
IHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9H
cmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVy
LCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwg
ZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlk
U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4u
aXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1
cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRM
KCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6
dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5n
TGlzdFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwg
dmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICB8
fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nl
c3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpc0RpcmVj
dCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRCeUlkU3Rh
dHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGlm
IChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRC
eVN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICBpZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpU
cmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICAgICAg
aWYgKCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwg
cHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MDM5LDI4ICs1MDM4
LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmIChV
TkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21w
aWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwogCi0gICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVz
ZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMp
KSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENv
ZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAg
ICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlh
bnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRC
eU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1
cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlh
bnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFz
ZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5
U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNl
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0
QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQ
dXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7
CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKKyAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMo
KS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNl
KTsKIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1
ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTA2
OCwxMiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVu
dENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1dEJ5VmFy
aWFudDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVz
KGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlh
bnQuY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywg
aXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC01MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlh
bnQ6OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0
QnlWYXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBO
b2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKLSAgICAgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0Rp
cmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4NCwyNiArNTE4MywyNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAKICAgICBkZWZhdWx0
OiB7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
UHJpdmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29u
c3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2
YXRlRmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQogewotICAgIGlmICghcHV0QnlJ
ZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9w
dGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVz
LmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeVN0YXR1
cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CisgICAg
ICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVt
VmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8
IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVzLm51bVZhcmlh
bnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRC
eVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1c2VQb2x5bW9y
cGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgp
KSB7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6
bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhw
cml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29t
cGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlk
U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5y
ZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0
QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgZm9yIChj
b25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJpYW50cygpKSB7CiAg
ICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE11
bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXREYXRh
LmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMo
KTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJpYW50cygpOwogICAg
ICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAg
YWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0QnlJZFN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
cHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA9
PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeVN0YXR1c1swXTsK
ICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2FzZSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CiAgICAg
ICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpOwotICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3Rh
dHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcElu
Zm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBzdG9y
ZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtNTI0MSw5ICs1MjQwLDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsK
KyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogewogICAgICAgICBBU1NFUlQocHJp
dmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNl
KTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdp
bigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRpb25T
ZXQoKSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5
dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0cnlDb21waWxlQXNQdXRCeU9mZnNl
dCA9IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlk
U3RhdHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAg
ICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9i
YXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5k
ZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0
ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNv
bWVzIG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBp
bmZvcm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGlu
Zm8gZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNl
bGwgdGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5
Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYg
YnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50
b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1
dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFs
SW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlz
U3ltYm9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAg
ICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVy
dHkpOworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFj
a1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4o
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1
cmUodWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogCi0gICAgICAgICAgICAgICAgICAg
IHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJl
bnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZh
dGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3Rh
dHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxl
QXNQdXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCi0gICAgICAgICAgICAg
ICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOwotICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lLCBPcEluZm8oKSwgT3BJbmZv
KGJ5dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUpOwpAQCAtNjU2NywxMiArNjU1Niwx
MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtp
ZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9m
bGFncy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0
dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMg
cHV0QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgICAg
ICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmll
ck51bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFN
b2RlKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlT
dGF0dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1v
ZGUoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9
CiAKQEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hHbG9i
YWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKQogICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXM7CiAg
ICAgICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxz
ZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGZhbHNlLCBQcml2YXRlRmll
bGRQdXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRo
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXMoUHV0QnlTdGF0dXM6
Okxpa2VseVRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFy
aWFudHMoKSAhPSAxCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5raW5kKCkgIT0g
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBd
LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAgICAgICAgICAgICAgICAgICAgfHwg
c3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmVjbWFNb2RlKCkpLCBn
ZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtODgxOSw0NSArODgwOCwyNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JF
eGl0SW5kZQogICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJv
b2wgaXNEaXJlY3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7
CiAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQ
dXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNr
VG9wLT5tX2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0
ZWNvZGVJbmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhl
IGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8g
YmVjb21lcyBudWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBp
bmZvcm1hdGlvbi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAg
JiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRv
b2tTbG93UGF0aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRW
YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAg
ICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRl
bnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRl
bnRpZmllci5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5m
cmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogCisgICAgUHV0QnlTdGF0dXMgc3RhdHVz
ID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBj
dXJyZW50Q29kZU9yaWdpbigpKTsKKworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAg
ICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVu
dGlmaWVyKCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlm
aWVyLnVpZCgpOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVy
LmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3Jh
cGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
aWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgp
KTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5m
bywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlm
aWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdElu
ZGV4LCBieXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlk
ID0gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAg
ICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJl
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKQEAg
LTg4NjgsOCArODgzOSwxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChC
eXRlY29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZQogICAgICAgICBhZGRW
YXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBM
ZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICBhZGRWYXJBcmdDaGlsZChu
dWxscHRyKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgotICAgICAgICBhZGRUb0dyYXBoKE5v
ZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKKyAgICAg
ICAgTm9kZSogcHV0QnlWYWwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQ
dXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJ
bmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgLy8g
UHV0QnlWYWwgYW5kIFB1dEJ5VmFsRGlyZWN0IG11c3QgYmUgdHJlYXRlZCBhcyBpZiB0aGV5IGNs
b2JiZXIgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSB0aGVtIGdlbmVyaWMu
CisgICAgICAgIGlmIChzdGF0dXMub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkp
CisgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmFkZChwdXRCeVZhbCk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDkx
NjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJm
NzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRleCA4NmEzZDA3NjY0ZDdm
YTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcx
ZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0
YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRl
ckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZp
bHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZh
MmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRC
eVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3Rh
dHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNo
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC01MDEsNyArNTAxLDcg
QEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBQdXRC
eVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVZh
bHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBjbGFzcyBDb25zdGFudEZv
bGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xk
U3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZSh2YXJpYW50Lmlk
ZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRv
R2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgIH0KIAot
ICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9k
ZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2b2lkIGVtaXRQdXRCeU9m
ZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFs
dWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5v
cmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0
LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAg
VHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFu
c2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigp
KSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAg
ICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0
YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBub2RlLT5vcmlnaW4uZXhp
dE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFn
ZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBOdWtlU3RydWN0dXJlQW5k
U2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFzcyBDb25zdGFudEZvbGRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0
dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUHV0QnlJZFN0
YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBQdXRCeVN0
YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICBiYXNlVmFs
dWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIG5vZGUtPmNhY2hl
YWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50
aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAog
ICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4ICsxNDIyLDggQEAgY2xh
c3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogCiAgICAgICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5z
aXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3Rh
dHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5j
b25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC53YXRjaENv
bmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAg
ICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVChwcml2YXRl
RmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlv
blNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBo
LmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0
NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29u
c3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0
ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBFZGdlKGJhc2VOb2RlKSk7CiAKICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5l
bnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA2
MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhj
OTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3
MmFjNzM4NTA5Li5lMjViMWYzODU0OTM1NGFlMTMyYWRkYmNiNjhhY2I5ZGE4MGI1Mjk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTEyMzYsNiAr
MTIzNiwxMCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNlPihjaGlsZDIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGNoaWxkMSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAgIC8vIER1ZSB0byByZWdp
c3RlciBwcmVzc3VyZSBvbiAzMi1iaXQsIHdlIHNwZWN1bGF0ZSBjZWxsIGFuZApAQCAtMjg2NSw3
ICsyODY5LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNh
c2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRT
dGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZjOWRjNDM5NDFlNTFjOGUzMTVkYTcz
NWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5NTA4NzYzOGY4NmRkNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTM4NSw4ICszODUsOCBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9k
ZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5nZXRC
eVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0YXR1cygpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwotICAgIGlmIChub2RlLT5oYXNQdXRC
eUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5SWRTdGF0
dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVzKCkpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAgIGlmIChub2RlLT5oYXNFbnVtZXJh
dG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZW51bWVyYXRvck1vZGVz
ID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSk7CiAgICAgaWYgKG5vZGUt
PmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDYyYTFmZWYz
ZGMyY2RkZTEwOTE1MjRkNjczNDA4NDBmZDNmMjYwYjEuLjFiZWM4ZGVlZDlkYmRiYTUwN2Q5YTNm
YjFiMDM5ZTI2ZWUxYWRkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAg
LTEyMDIsNiArMTIwMiw3IEBAIGNsYXNzIEdyYXBoIGZpbmFsIDogcHVibGljIHZpcnR1YWwgU2Nh
bm5hYmxlIHsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0cnVjdHVyZTsKIAogICAg
IEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd0dldEJ5VmFsOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xv
d1B1dEJ5VmFsOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZv
aWQgdmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZjOWRiMWE3YzU0NGZhMWNh
OThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5YTc5MTg0MmU4ODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMjUy
LDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIGxpbmtCdWZm
ZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBsaW5rQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5rQnVmZmVyKTsKKyAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFhNDA5NGY1NzA2MGE3Y2Rh
OWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkxYjI5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMTk5LDYgKzE5OSwxMSBA
QCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgICAgICBtX3B1
dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4oZ2Vu
LCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlWYWwoY29uc3QgSklUUHV0
QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgIHsK
KyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZh
bEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAgIHZvaWQgYWRkRGVsQnlJ
ZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93
UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBl
cjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBAIC0zNjAsNiArMzY1LDcg
QEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0
QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5VmFs
R2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBl
cjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAgICBWZWN0b3I8SW5saW5l
Q2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9wdXRCeVZhbHM7CiAgICAg
VmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPiwgND4gbV9kZWxC
eUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5VmFsR2VuZXJhdG9y
PiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRJbkJ5
SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2NGYwZDZmNDY0NjY0ZDBm
Li4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBFeGl0TW9k
ZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUp
CiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgIGNhc2UgRmlsdGVy
Q2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZp
bHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBj
YXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFkMjc3YTE5YmQxYzlhLi43
Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0
ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCisjaW5jbHVkZSAi
UHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5oIgogI2lu
Y2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCkBAIC05
Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAKIHN0cnVjdCBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQs
IDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Owog
ICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0zMjEwLDE1ICszMjEwLDE1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPEluQnlTdGF0dXMq
PigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0dXMoKQorICAgIGJvb2wg
aGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0
QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlTdGF0dXM7CiAg
ICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0dXMoKQorICAgIFB1dEJ5
U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzUHV0QnlJZFN0
YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5SWRTdGF0dXMqPigpOwor
ICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5m
by5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNEZWxldGVCeVN0YXR1
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggZTc1YmNmZThh
MWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2ZkYWM4ZjIzNTE4Mjg3MjI0
ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEZpbHRlclB1dEJ5
SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhGaWx0ZXJQdXRCeVN0YXR1
cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRlbGV0ZUJ5U3RhdHVzLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0
dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJTZXRQcml2YXRlQnJhbmRT
dGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCBiMWNmZWU4YWNlYzM4
Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4YjFjNGNmYTZhMzExMDI4
Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMTUsMjEgKzIxNSw2IEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJs
b2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNh
bGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAg
ICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbCkgewot
ICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUgb3BfcHV0X2J5X3ZhbCBhcyBQdXRCeUlkIGFu
ZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVuIHdlIGZvdW5kIFN0cnVjdHVyZVN0dWJJbmZv
IGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHN0aWxsIGl0
IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZpbmQgU3RydWN0dXJlU3R1YkluZm8gaGVyZS4g
TGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpby4KLSAgICAgICAgICAgICAgICAv
LyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlzIGNvbXBpbGVkLgotICAgICAgICAgICAgICAg
IC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAgICAgICAgICAgICAgLy8gMy4gU2luY2UgKEEp
IGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcHV0X2J5X3ZhbCwgKEIpIGNhbiBnZXQg
U3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQgYXMgaW5saW5lZCBTZXR0
ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0LiAoQSkncyBKSVREYXRhIGlzIGRlc3Ryb3ll
ZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNvbWVzIExMSW50LgotICAg
ICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxvY2sgaW5saW5pbmcgKEEpIGdldHMgT1NSIGV4
aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkgZ2V0cyBCYXNlbGluZSBD
b2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgLy8gNi4gKEIpIGdldHMgT1NSIGV4aXQu
IChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJbmZvIGluIChBKSBmb3Ig
UHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBkb2VzIG5vdCBleGlzdCBz
aW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQgb25jZS4KLSAgICAgICAgICAgICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kQnlWYWxJ
bmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBieVZh
bEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhD
b2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1YkluZm8tPmRvbmVMb2Nh
dGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAK
aW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhmZDU4YS4uMWY0MTgzMThh
NGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZpbHRlckNh
bGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6
CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxl
dGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
QEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhv
c2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4gVGhp
cyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3
ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQg
dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3
ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBl
bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uo
Y3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2Zm
c2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVhcigp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQu
YWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAg
IGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3Vy
cmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcgQEAgY2xhc3MgT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYyZWNlODBmZTc0ZjIuLjg5
ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01hcFNldDoKICAgICAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRiOWM5YTVhMjAuLmQ1NDk2
NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1
czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hl
Y2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZTMyNDdmOGM2OTI2ZDI5N2I2Y2Ey
Y2YxNGUyZDZiNWQ5OTNlYjZiLi42MDNmZjdiMmU1MmRjZWVlM2JjMzY1ZGJjNGVlMzNiM2MzN2Ux
ZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJp
dmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZh
OGYxMGE0Yy4uMjM4MDdiNjE4Mjc4YTE0ZGQyY2E1ZjM4MmM5N2M4M2FmYWEwNzhiOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0zMTc3LDM0ICszMTc3LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgpID09IFB1dEJ5VmFsRGly
ZWN0LCBub2RlLT5vcCgpKTsKLQotICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0g
Q2VsbFVzZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmlu
Z1VzZSkgewotICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0
cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpIHx8IChjaGls
ZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxV
c2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3Ry
aW5nKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQy
LnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMp
OworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1i
b2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhT
eW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAg
IGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywg
Y2hpbGQxKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxk
Mik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IGFyZzNHUFIgPSBhcmczLmdwcigpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpCisgICAg
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIs
IGFyZzNHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnMSh0aGlzLCBjaGlsZDEpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Mih0aGlzLCBjaGlsZDIpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBj
aGlsZDMpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFy
ZzNHUFIgPSBhcmczLmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1v
ZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJH
UFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAg
ICAgICAgIAorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNo
aWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIs
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87CisgICAgICAg
ICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgc3R1YkluZm9H
UFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BlY3Vs
YXRlKG5vZGUsIGNoaWxkMik7CisgICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgY2hpbGQzKTsK
KworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljOworICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENh
bGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3Jp
Z2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0
ID0gbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVj
bWFNb2RlID0gbm9kZS0+ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSLCBlY21hTW9kZSwgaXNEaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3QpOworCisgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkMiku
aXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9k
ZShjaGlsZDIpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
c3RhdGUuZm9yTm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4u
c2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhH
ZW5lcmF0b3I+IHNsb3dQYXRoOworICAgICAgICAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVy
YXRpb24sCisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIG51bGxwdHIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtX2ppdC5hZGRQdXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKwog
ICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU4NzEsNyArNTkzMSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAppbmRleCBi
OTA2NjVlY2NlNTJjNTdmNDRiNzBkNDY3YzRhNGU1YTVmMzcwMmUwLi45MzFiYWI1MDMzNjFlOTcy
MGY3MmJkNjY3MTliN2E2MTdlZDlkMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcApAQCAtMjMz
LDYgKzIzMywxNSBAQCBjbGFzcyBTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgp
Lm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgICAg
ICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6IHsKKyAgICAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAg
ICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIp
OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8
IGNoaWxkMS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc2lkZXJCYXJyaWVyKGNoaWxkMSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAg
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggNTQxMGQ5MDg5NmRjNGYwMTA1
NzkzMGRmODJmNjYxOTJiODFmNmMwZi4uYzVlNWNmMzZhNzcwZDE1ODNiNjkzZGZkODgxZDY0MjRh
YjE3YmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAg
LTMxMiw4ICszMTIsOCBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFy
aWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgIT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhdmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgICAg
ICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCBmZGE2NGQzNWRhMzQyODg5Yzc5OGMw
NTFlOTU3NmU4YTFlMzNhMzliLi5mMWEzODA5ZDdlZmUzMGY4ZDU5YmEyMWZhY2QwNzA5ZTQzOGI5
MDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBjbGFzcyBWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAg
IGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CkBAIC00MjEsNyArNDIxLDcgQEAgY2xhc3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJD
YWxsTGlua1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggMDNmODY1MmM2Y2I4MmM2MjAyMGQxZTY2
YmI1OWY0NjU5MWQ4M2U0Yy4uODNiNTFiYTljZjc2NWRhMDQ2MzczYTc5YjFjYTAzMzBjNDNjN2E3
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApA
QCAtNDA3LDcgKzQwNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNWEzZTk4Zjc1MzcwMWQzYjM0Zjg0Yjk4MDgzZDI0
ZGFlOGVmNzEwMC4uNTc1MjY0MjAyMzdhYmIwZmFlN2E3NWU2MDI0NDc2NzUxZWYzMTdhOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTY0
OSw3ICsxNjQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTU1NTYsNTcgKzU1NTYsMTU1IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7Ci0gICAgICAg
ICAgICAgICAgVl9KSVRPcGVyYXRpb25fR0NDSiBvcGVyYXRpb24gPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0
Q2VsbFN0cmluZ05vblN0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENl
bGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5n
Tm9uU3RyaWN0OworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFp
bnMobV9ub2RlKSB8fCAoY2hpbGQxLnVzZUtpbmQoKSAhPSBDZWxsVXNlICYmIGNoaWxkMS51c2VL
aW5kKCkgIT0gS25vd25DZWxsVXNlKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZDEudXNl
S2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25f
R0NDSiBvcGVyYXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQy
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0
cmluZ1N0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0
Q2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmlj
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbENlbGxTdHJpbmdTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbENlbGxTdHJpbmdOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9p
bnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N0cmluZyhjaGlsZDIpLCBs
b3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVy
YXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3Ry
aW5nKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVz
ZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+
b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3Q7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
PmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQs
IG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBs
b3dTeW1ib2woY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dD
ZWxsKGNoaWxkMSksIGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HSkpKIG9wZXJhdGlvbjsKLSAgICAgICAg
ICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0OwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdDsKKyAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HSkpKIG9wZXJhdGlvbjsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3Ry
aWN0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgp
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3Q7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgICAg
ICAgICBWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCisgICAgICAg
ICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBsb3dK
U1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBW
b2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAg
ICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hp
bGQzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisKKyAgICAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChjaGlsZDEpOworICAgICAgICAgICAgTFZhbHVlIHByb3Bl
cnR5ID0gbG93SlNWYWx1ZShjaGlsZDIsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxkMywgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKGNoaWxkMik7CisgICAgICAgICAg
ICBzcGVjdWxhdGUoY2hpbGQzKTsKKyAgICAgICAgICAgIGJvb2wgcHJvcGVydHlJc1N0cmluZyA9
IGZhbHNlOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzSW50MzIgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGJvb2wgcHJvcGVydHlJc1N5bWJvbCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGFi
c3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChhYnN0cmFjdFZh
bHVlKGNoaWxkMikuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgICAgIHByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChhYnN0cmFjdFZhbHVlKGNo
aWxkMikuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOworCisgICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29t
ZVJlZ2lzdGVyKGJhc2UpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lz
dGVyKHByb3BlcnR5KTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rl
cih2YWx1ZSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9ub3RDZWxsTWFzaywg
VmFsdWVSZXA6OmxhdGVSZWcoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikpOworICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fbnVtYmVyVGFnLCBWYWx1ZVJlcDo6bGF0ZVJlZyhH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkZUTEpJVCkgPyAxIDogMDsKKworICAgICAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhwYXRjaHBvaW50KTsKKworICAgICAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRs
U3RhdGU7CisgICAgICAgICAgICBDb2RlT3JpZ2luIG5vZGVTZW1hbnRpY09yaWdpbiA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbV9ub2Rl
LT5lY21hTW9kZSgpOworICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG1fbm9kZS0+b3AoKSA9
PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uY29kZU9yaWdpbnMtPmFkZFVuaXF1ZUNh
bGxTaXRlSW5kZXgobm9kZVNlbWFudGljT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdGhlIGRpcmVjdCBleGl0IHRhcmdldCBmb3Igb3BlcmF0aW9uIGNhbGxzLgorICAgICAg
ICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0gZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNyZWF0ZWQg
YnkgdGhlIElDIGZvciBnZXR0ZXJzLiBXZSBkb24ndCBoYXZlCisgICAgICAgICAgICAgICAgLy8g
dG8gZG8gYW55dGhpbmcgd2VpcmQgb3RoZXIgdGhhbiBjYWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwg
YXNzb2NpYXRlIHRoZSBleGl0IHdpdGgKKyAgICAgICAgICAgICAgICAvLyB0aGUgY2FsbHNpdGUg
aW5kZXguCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVh
dGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOworCisgICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHBhcmFtc1syXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNj
cmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0
b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BS
UmVnLCBzdHViSW5mb0dQUiwgZWNtYU1vZGUsIGlzRGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDog
UHV0S2luZDo6Tm90RGlyZWN0KTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHByb3BlcnR5SXNTdHJpbmc7CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSBwcm9wZXJ0eUlzSW50
MzI7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gcHJvcGVydHlJc1N5bWJvbDsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwg
ZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRo
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1Bh
dGhDYWxsOworICAgICAgICAgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwg
bm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
U2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24sIEludmFsaWRHUFJSZWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNl
bWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3It
PnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJl
cG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZl
ciwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtODk1MSw3ICs5MDQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0
YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xk
U3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CkBAIC04OTY2LDE2ICs5MDY0LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwor
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArOTA4NSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3Jh
Z2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3
ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1
YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3Rz
KGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUg
IlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYw
NGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0
YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNy
byhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2Vs
ZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0
QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1h
Y3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAog
ICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBl
ZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7
CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAg
bV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJ
ZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJ
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09
IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJ
ZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2lu
QnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5z
dGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6
ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDZjNGYxMWY2OGU5
MDNlYmE2N2M2ZDdlYTkzODdkODFiNDU2YWUwZjUuLjZjMzRhYzY3M2EyODJjODhiYTFlYmNmYzRh
Y2UxODU1ZmEwMjM4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CkBAIC0yNjcsMTYgKzI0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGxpbmsoKTsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNo
ZWFibGVJZGVudGlmaWVyKTsKLQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0
ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxl
SWRlbnRpZmllcik7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKLQogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTM4MiwzOCArMzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVj
b2RlKTsKIAogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJy
YXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3Bl
Y2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUg
Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAgICAgLy8gUHJv
cGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVj
aW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRl
ZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCi0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQu
IEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAg
ICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMyU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgRG91YmxlU2hhcGUpOwotICAgICAg
ICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0
Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRH
ZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwot
ICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlz
dCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hh
cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbElu
Zm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0x
MDY0LDYgKzEwMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5
VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0
QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4g
bV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFs
czsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0x
MDkxLDYgKzEwMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRC
eVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVgg
fTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAg
IHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQg
bV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhh
MWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uNGZhZTVhZDY3MWZkMGViNWZmNTcxMDU3YjRh
ZDUzMGE0MDQxYzcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50
aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRL
aW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5
cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNv
ZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5
SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKICAgICAgICAgLCBt
X2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAt
MzgxLDYgKzM4MSw2OCBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiAgICAgICAgIG1fc3R1Yklu
Zm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAor
SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0
eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKKyAgICA6IEJhc2Uo
Y29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBl
LCB1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKKyAgICAsIG1fcHV0
S2luZChwdXRLaW5kKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQor
eworICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAg
bV9zdHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8t
PnJlZ3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5m
by0+dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiA9IHN0dWJJbmZvR1BSOworICAgIG1fc3R1YkluZm8tPm1fYXJyYXlQcm9maWxlR1BS
ID0gYXJyYXlQcm9maWxlR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5m
by0+YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVUYWdH
UFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BSID0g
cHJvcGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RhcnQg
PSBqaXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsK
KyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8p
LCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6
ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAgQmFz
ZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5z
bG93UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKK1ZfSklUT3BlcmF0aW9uX0dTc2lKSkMgSklUUHV0
QnlWYWxHZW5lcmF0b3I6OnNsb3dQYXRoRnVuY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9wdXRL
aW5kKSB7CisgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgIGlmIChtX2VjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICBpZiAobV9lY21hTW9kZS5p
c1N0cmljdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToK
KyAgICAgICAgQVNTRVJUKG1fZWNtYU1vZGUuaXNTdHJpY3QoKSk7CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgIEFTU0VSVChtX2VjbWFN
b2RlLmlzU3RyaWN0KCkpOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBp
bGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJSZWcgc3R1YkluZm9HUFIpCiAg
ICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwg
YWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCBlZTY4MTQxMDFhODFlYmQx
NTViZjRkYjY5M2ZmNDdjOGEyNzhmN2ZiLi4zY2U1ZDM3ZDJjNDBkYzk5MDQ5ZTEyYWQ1MzE0Yjg5
NWY0YzAzNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAgY2xhc3MgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogCiBjbGFz
cyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3Igewog
cHVibGljOgotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAgICAgICA6IG1fZWNtYU1vZGUo
RUNNQU1vZGU6OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9
IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKQEAg
LTE0MiwxMCArMTQwLDQyIEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgSklUQnlJZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0
aEZ1bmN0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBF
Q01BTW9kZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CiAgICAgUHV0S2luZCBt
X3B1dEtpbmQ7CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKCkgPSBkZWZh
dWx0OworCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayosIEpJ
VFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJyYXlQcm9maWxlR1BS
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9zbG93UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0
aEp1bXAubV9qdW1wOworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFz
dFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisKKyAgICBWX0pJVE9wZXJh
dGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKKworcHJpdmF0ZToKKyAgICBFQ01BTW9k
ZSBtX2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CisgICAgUHV0S2luZCBtX3B1dEtp
bmQ7CisKKyAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CisgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOworfTsKKwogY2xhc3MgSklURGVsQnlWYWxH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogICAgIHVz
aW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMTdjMjdmZGMxY2QzYmY2MzI2YTQzYjVmZWY4
MWU2MGU2Y2M0N2YwMi4uNjdlMGI3ODMwOWE0M2YyYmJiOTlhOTFiMzY4OWI5MjdiMjYyZGI2NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTM1Miw2ICszNTIsMTQg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0
ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUKICAgICB9CiB9CiAKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0
ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwg
QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSkpOworICAgIH0KK30K
KwogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2Fz
ZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkpOwpAQCAtMzYyLDI0
ICszNzAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1Nw
ZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maQogICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mT3V0T2ZCb3VuZHMoKSk7CiB9CiAKLWlubGlu
ZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxl
KQotewotICAgIGF1dG8gYXJyYXlQcm9maWxlU2F3ID0gW10gKEFycmF5TW9kZXMgYXJyYXlNb2Rl
cywgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpIHsKLSAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNJ
bmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKLSAgICB9
OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9j
ayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1v
ZGVzKGxvY2tlcik7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVT
aGFwZSkpCi0gICAgICAgIHJldHVybiBKSVREb3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNh
dyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAg
IGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAg
ICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwot
fQotCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
aW5kZXggZDI0ZDlmNWVkZjg3MTU4MzhkNzc1YmVjYzcxZjgxOTI0Y2I5M2M5Ny4uN2ZkMDQ2MzI4
MWUzNWRmZTU1ZmFlMjA2MTAwYTE1ZGE5NzE5YTI5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03MTksNyArNzE5LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAg
ICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0
KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5
SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdD
YWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1MSw3ICs3NTEsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplYwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRl
ckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAg
ICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1
Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0KTsK
KyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUs
IHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQs
IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdD
YWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4Miw3ICs3ODIsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRl
ckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAg
ICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3Ry
dWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7Cisg
ICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
c3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwg
UHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0Nh
Y2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEzLDcgKzgxMyw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1
Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0KTsKKyAg
ICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBz
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQ
dXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQdXRQcml2YXRlRmllbGRD
YWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLAogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1Yklu
Zm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRp
ZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1Yklu
Zm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CisgICAgICAgICAgICByZXBh
dGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVy
ZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CiAgICAgfSk7CiB9CiAKQEAgLTkyNCwxNiAr
OTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKCiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5n
Qnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRT
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90
LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
U2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1Zh
bHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0
aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSog
YXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHN1YnNjcmlwdC50cnlHZXRB
c1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVl
OwogICAgICAgICB1aW50MzJfdCBpID0gKmluZGV4OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNl
VmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBieVZhbElu
Zm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygp
OwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIGksIHZhbHVlLCBl
Y21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1MSwzMiArOTUx
LDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
ICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNt
YU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9IAorICAgIH0KKwogICAg
IGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAg
ICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUp
CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5
KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmlu
ZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+
Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBiYXNlVmFsdWUucHV0
SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAotc3RhdGlj
IHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBkaXJlY3RQdXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwg
SlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9m
aWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYg
KHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heWJlSW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNV
aW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
ICAgICAgICAgdWludDMyX3QgaW5kZXggPSAqbWF5YmVJbmRleDsKIAogICAgICAgICBzd2l0Y2gg
KGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC05ODgsNyArOTg2LDggQEAgc3RhdGlj
IHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIEZB
TExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJh
eVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxl
KQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwMDIsMTUgKzEwMDEsMTEgQEAgc3RhdGlj
IHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4
KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RU
aHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHVi
SW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwo
c3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGVjbWFNb2RlLmlzU3Ry
aWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9i
YWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CkBAIC0xMDIzLDIy
NiArMTAxOCwyMDYgQEAgZW51bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdpdmVV
cCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7Ci0KLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5n
IGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0
aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7Ci0KICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzQ29weU9uV3JpdGUoYmFzZVZhbHVlLmdl
dE9iamVjdCgpLT5pbmRleGluZ01vZGUoKSkpCi0gICAgICAgIHJldHVybiBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKLQotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3Jp
cHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNl
VmFsdWUpOwotCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBC
eXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5l
KTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAg
ICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2Rl
ICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgYnlWYWxJ
bmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVC
bG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbChs
b2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1
bHQ6Ok9wdGltaXplZDsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
SlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAo
IWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5p
c0ludDMyKCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVj
dC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNo
aW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1
dEtpbmQ6Ok5vdERpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0
IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwg
MTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9u
UmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmlu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8o
KSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6
R2l2ZVVwOwotICAgIH0KKyAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVh
YmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAg
ICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7CisgICAgICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJs
b2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAm
JiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlw
dCkpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQu
dG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7Ci0gICAgICAgIGlmIChzdWJzY3Jp
cHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAg
ICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8t
PmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2Nr
LCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6Ok5vdERpcmVjdCwgYnlWYWxJbmZv
LT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNz
IHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNo
ZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0Nl
bGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3Jp
Z2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICAgICAg
YmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKKworICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6Tm90RGly
ZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3Vs
dDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6
OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAx
MCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIG5l
dmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1p
bmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVy
YXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAgIC8v
IHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93
UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0gICAg
ICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAgIG9w
dGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KLQot
ICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
cHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1p
emUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0g
T3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkg
dG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAg
ICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8t
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKLSAgICB9
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSkpOworCisgICAg
cHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpz
dHJpY3QoKSk7CiB9CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlW
YWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIC8vIFNlZSBpZiBpdCdz
IHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKKyAgICBw
dXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNs
b3BweSgpKTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkaXJlY3RQdXRCeVZhbE9w
dGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9k
ZSBlY21hTW9kZSkKK3sKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHN1YnNjcmlwdC5p
c0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9
IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBKU09i
amVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQg
dG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJy
YXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlN
b2RlUGVybWl0c1B1dERpcmVjdChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8t
PmFycmF5TW9kZSkgeworICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGlu
Z01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZSkgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVEaXJlY3RQdXRC
eVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRp
b25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXBhdGNoQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0LCBl
Y21hTW9kZSk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRv
IHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdl
dCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRp
bWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0gZWxzZSBpZiAoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7
CisgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwo
c3Vic2NyaXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1
YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5p
c1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2Fj
aGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJVDo6
Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KHZtLCBjb2RlQmxv
Y2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6RGlyZWN0LCBieVZhbEluZm8t
PmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0
aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mg
c2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBieVZh
bEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmNhY2hl
ZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2Vs
bCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpLCBjb2RlQmxvY2st
PnB1dEJ5SWRDb250ZXh0KCkpOworCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1
ZSk7CisgICAgICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwg
Z2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAg
ICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8t
PmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
KyAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2lu
ZDo6QnlWYWwsIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJl
c3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1
bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhh
biAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8v
IG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5v
bi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBp
dGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlCi0gICAgICAg
IC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBz
bG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCi0g
ICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMCkKLSAgICAgICAgICAg
IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0K
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIAot
ICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9m
aWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNl
VmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0ID0gdHJ5RGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlw
dCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBP
cHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0
byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAg
ICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRk
cmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVy
aWMpOwotICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNt
YU1vZGUpKTsKKyAgICBkaXJlY3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywg
cHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBw
dXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJ
bmZvLCBlY21hTW9kZSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1
YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHVi
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkp
OworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
ICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7Ci0gICAgCisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKwor
ICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBw
cm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21h
TW9kZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVj
dFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9u
UHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKworICAgIHN0dWJJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09i
amVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xv
cHB5KCkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCcmFuZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCmluZGV4IDI1ODRlOTk1ZTQ2NmRlOTRhOWIyMDMyN2IwZWM0ODgxZDVm
MTk5OTguLmVmYmQ4ODczNTQyZmMzZjRiZTgzZTA2YmUwNjI1N2JmYzI5Y2M0NjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yMDMsMTAgKzIwMywxNSBA
QCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2Vu
ZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZQogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyos
IFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0UHJpdmF0ZU5hbWVHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2
YXRlRmllbGRQdXRLaW5kKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1
dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1K
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJ
bmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkp
OworCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxl
KikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSop
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVBy
b2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJy
YXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJy
YXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQ
cm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJy
YXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZv
KiwgQXJyYXlQcm9maWxlKikpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwg
RUNNQU1vZGUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGws
IFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExp
bmtJbmZvKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAppbmRleCAzZDFkODRmYzgyMDJiZjg4OWJkZjIwZWEzMzhkZjhhOTExMDkwNjNiLi5m
MTc2Y2JiODE5NGM5MTZiNjdlNWU2ZmMxYjY5MDFhZjUwMTRmYThmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNDM4LDE3OCArNDM4
LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owor
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9
IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1
dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRk
QnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0g
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNo
YWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFu
dCkgewotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0g
ICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4
SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIu
bGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1p
dFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShu
b3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5
X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OwotCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
LQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgbG9h
ZDgoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5n
U2hhcGVNYXNrKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVn
VDMpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJl
Z1Q0KTsKIAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MiksIHJlZ1QzLCByZWdUNCwgZWNtYU1vZGUsIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5n
U2hhcGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAg
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAg
ICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJl
c3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5k
ZXhpbmdTaGFwZSkpOwotCi0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAgICBzdG9yZTY0KHJlZ1Qz
LCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5v
dEludDMyKHJlZ1QzKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDMsIGZwUmVn
VDApOwotICAgICAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAgICBub3RJbnQubGluayh0
aGlzKTsKLSAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QzKTsKLSAgICAgICAg
bW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAg
ICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdo
dCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0g
ICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQp
KTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENS
QVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7Ci0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQcm9maWxl
U3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7Ci0gICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdU
MiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgpLmxpbmtU
byhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIAot
ICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgIAotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0
VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNo
YXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5t
X2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAg
aXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihB
cnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hh
cGUpKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQoWmVybywgQmFzZUluZGV4
KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkp
OwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpudW1W
YWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVz
dWx0LCB0aGlzKTsKLQotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0
b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBqdW1wKCkubGlua1Rv
KHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9wdXRCeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xv
d0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUgc2l6
ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Mzk1
CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02NjIsMTIgKzUxNiwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Cisg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Cisg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAg
ICBpZiAoaXNEaXJlY3QpCkBAIC02NzUsNDggKzUzMiw0MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogICAgIGVsc2UKICAgICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWw+KCkpOwogCi0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CisgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwor
CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0
aCBhbmQgbm90IGNsb2JiZXJlZC4KKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICAv
LyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQu
CisgICAgLy8gY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgLy8gY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMjsKKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBy
ZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBS
ID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJn
dW1lbnRHUFI0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQ
UjU7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZVBSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
YnlWYWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihlY21hTW9k
ZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQogICAgIENhbGwgY2FsbDsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Ns
b3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplOworICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwogICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CisgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7
Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC03MzQsMjEgKzU4MywyMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgaml0
LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJn
dW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjU7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBy
ZWdUMzsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQ
UiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIs
IGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIp
OwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRk
cmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBP
cGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BS
NCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9u
UHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsKIApAQCAtODEwLDEzICs2NTks
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BS
MzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUyLDE0ICs3MDEsMTQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQ
UjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRH
UFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUp
PihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJ
bmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwog
CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0z
MjkxLDgyICszMTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdp
c3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNM
aW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewot
ICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFs
KGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGln
dW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
dHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlz
SW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRB
cnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmln
VWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VSVChp
c0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJy
YXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBi
eVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
cywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJp
ZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCku
Y2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNh
bGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAK
LSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9w
X3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAg
ICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRv
Q1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVl
KCkpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUg
cHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwot
ICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAo
YnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRy
ZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7
Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhl
ciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9m
ZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2Rl
KTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxE
aXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZh
dGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAg
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDgs
MjIzICszMTgxLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRo
Q2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsK
LSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0
ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1p
dFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRv
bmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9j
b2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYg
KCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1f
ZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxs
U2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20s
IGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUg
OiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAg
fQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJC
YXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8g
Il9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3Ry
aW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7
Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJ
bmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAg
ICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAo
YnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRk
cmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1
dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlv
blB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBj
b25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHAp
LAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4g
YWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQs
IENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwotICAgIAotICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJv
cGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAg
IFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3Jh
dGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2gg
PSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAg
ICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAg
ICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdl
dCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGlu
ayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBl
ZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JU
eXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJs
eVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNj
cmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNj
cmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRj
aCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8g
YmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGgg
ZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7
Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRl
U2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBp
ZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKLSAgICAgICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVk
SW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIHhvcjMyKGVhcmx5
U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOwot
ICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhm
ZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQubGluayh0aGlzKTsKLSAgICAgICAg
aW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFz
ZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxh
dGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNo
LCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVk
QXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5
cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0
Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVn
aXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVy
SUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJl
Z1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAK
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChi
eVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlw
ZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1f
YmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBp
c0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0
ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRy
ZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0
Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRl
U2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHBy
b2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5r
KHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJ
Zk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlT
Y3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNh
c2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKGVh
cmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0Y2gp
OwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHku
bGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJs
eVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIobGF0ZVNj
cmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7
Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNj
cmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vu
ZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBp
biBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0
aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwg
bGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9G
bG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNl
SW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0
ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2Fz
ZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCmluZGV4IGU4MjY5ZmQxZTE5OWYxNTI0ODRlYjQ0ZGRlZjJhYWQxNzc4MjMyZmEuLjYyMGU4
NGY2NjUwZTYxNjZmMDc2OGRlZDJmZjk0OGIzNTg1MjU1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDY2LDE1
MSArNDY2LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8o
bV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1Qw
LCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QxKTsKLSAgICAKLSAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6
IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGluZT8KLSAgICBsb2FkOChBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihDb3B5T25X
cml0ZSkpKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdU
MSk7Ci0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0g
ICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBw
cm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6
SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAg
RUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0
S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVj
dCA6IFB1dEtpbmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
VU5VU0VEX1BBUkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFwZSkpOwotICAgIAot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDMpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
LSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2Fz
ZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIo
cmVnVDEpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwg
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKLSAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QzKTsKLSAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50
ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAg
bm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1Qx
LCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1Qw
KSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVn
VDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAgICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIG91dE9m
Qm91bmRzLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENh
c2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVn
VDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMp
OwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2Vz
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAg
ICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocHJvZmlsZSksIHJlZ1Q2KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDYsIHJlZ1Q3KTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURf
UEFSQU0oYnlWYWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFk
ZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBy
ZWdUNiwgSW52YWxpZEdQUlJlZywgZWNtYU1vZGUsIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMy
KEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgIAotICAgIExhYmVs
IHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwot
ICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRl
eChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKLSAgICBK
dW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVtaXRB
cnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFk
ZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVS
ZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0g
ICAgCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7
CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNjIwLDEyICs0
OTcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxw
dHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUg
PSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTYzMywyMSAr
NTEzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2Fk
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9w
dXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCisKKyAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKwogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVs
b3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAgLy8g
U3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1pdExv
YWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJl
Z1QwKTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNt
YU1vZGUudmFsdWUoKSkpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2Fs
bDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCBy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdU
NCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmExMzQ1
ZjY5NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQxOTQzZjhjODFkN2YyNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQgQEAg
dm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMg
YXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlT
bG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwg
UHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAgIHN3aXRjaCAocHV0
S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0Owor
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmll
bGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0
QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmlj
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGls
ZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVu
Y3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRl
Y2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCitzdGF0aWMgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVu
Y3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQ
dXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRL
aW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0
cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICBz
d2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBz
d2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBB
U1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAg
ICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2lu
IHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0
QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDggKzcyMyw4
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNl
bGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ss
IG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5
SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRB
Y2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RN
b2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5
TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRT
b21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNl
V2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNl
V2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIGlmICh0cnlD
YWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYg
KHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQp
ID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEJ5
S2luZCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVB
cnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQor
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAg
eworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlNDZWxsKiBiYXNlID0g
YmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJ
bmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJ
bnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTog
T3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAg
ICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2
NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsK
KyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJ
bnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3Vs
dCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJl
cGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIo
KSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZp
cmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2Nr
LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJh
eVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8s
IHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCkBA
IC05ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnko
CiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzU2LDI4
ICsxODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQogfQogCi12b2lkIHJl
c2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5nIEZ1bmN0aW9uVHlw
ZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAg
IEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5j
dGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwotICAg
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwot
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRl
Y2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOworICAgICAgICBG
dW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rp
b25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewor
ICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29k
ZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVy
aWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJlc2V0RGVsQnkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5k
IGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMxOWYwMmQ0ZDQwMTk1
ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhj
ZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC00Myw2ICs0
MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5hbWVCeUlkLAogfTsK
IAorZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCit9OworCiBl
bnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApAQCAtNTYsNyArNjEs
OCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwg
U3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoUHV0QnlJ
RChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hl
YWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1
dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9pZCBy
ZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVh
YmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNH
bG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIs
IGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBAQCB2
b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtD
YWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2b2lk
IHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwot
dm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQg
cmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7CiB2
b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQp
Owogdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2lu
ZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNiLi43
MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcgKzMy
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9mIGFs
aWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGVy
ZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5jcHAp
CisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQ
dXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0aW5n
IHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBpbXBs
ZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhpcwog
Ly8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436337</attachid>
            <date>2021-08-24 15:00:51 -0700</date>
            <delta_ts>2021-08-24 15:40:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210824150050.patch</filename>
            <type>text/plain</type>
            <size>331328</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi4wYjQ2YjIzMjY4YmRhOTRm
YjJjNGQ5MjQ1Nzk4YWI1Y2ZkMTBmOWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDAgQEAKKzIwMjEtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFw
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1
dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQ
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4
aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1
cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpT
Q19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXpl
KToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6
OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQ
dXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlND
OjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisK
IDIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwgc2hvdWxkIG5vdCBsb2FkIGlu
ZGV4aW5nVHlwZSB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZhN2EuLjMyM2Q4YTQwZTFmNmUy
M2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2Jq
ZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlFMTRDQTdE
QzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NjE0Q0E3REMxMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUEx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyog
UHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkE1MTRDQTdEREQw
MDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkz
QjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlz
aXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQkQxQjQ4N0E3NzAw
QzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJl
ZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzMDM2MUQ0MTkyQzMw
MDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDExIEBACiAJCTBGOTMzMjk0MTRD
QTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0QnlTdGF0dXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJ
ZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
dXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE4
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZh
cmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlWYXJpYW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAv
KiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVuY2VzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2OTUsMTAgQEAKIAkJCQkwRkQz
RTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLywKIAkJCQkwRjE1
Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCAqLywKIAkJCQkwRjE1Q0Qy
MTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8sCi0JCQkJMEY5MzMyOTkxNENB
N0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJMEY5M0I0QTcxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAv
KiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZh
cmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICov
LAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmNwcCAq
LywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5oICov
LApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJFMUM4RTNFQzgwMDhDMDg1QSAv
KiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3
MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTMzMkE0MTRDQTdE
RDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzQjRB
QTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQ
cm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cmlu
ZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTljMzAyMGQuLjcwNzdlZjlhZTMx
MTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmNwcAogYnl0
ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNl
LmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
CitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNw
cAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFu
ZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMzNWI2Li4yY2Nk
MzU2MzgzMDQ5ZDc4ZmMyNjliZjA1NWIyYzIxMTZlNDdjYmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwxOSBAQCBSZWY8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpndWFy
ZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1MiwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNvbnN0CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3LDE5IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25zdAogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3NywyNCBAQCBib29s
IEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNh
c2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpmb3JF
YWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAgICB9CiB9CkBA
IC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZNJiB2bSwgVmVj
dG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
Q29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgpID09IHR5cGUo
KTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtOTYxLDYgKzEwNjUsOCBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0
dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hH
UFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsxMTY2LDggQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC0x
MTQ1LDYgKzEyNTMsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlm
IChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTExOTksMTUgKzEzMDksMTQgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlz
RW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9h
cnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTIyNywxNiArMTMz
NiwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAg
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAg
ICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoR1BS
KSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3Jh
dGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNo
M0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVt
cHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNo
R1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzcxLDIx
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAg
ICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGppdC56
ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgICAg
IGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICAg
ICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0
Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJsZShz
dGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5
ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vs
c2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1w
dHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQUigp
KTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM5NSwyNzMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
IAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5
KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVk
U3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBl
bmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNl
IG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5w
cm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3JwaGlj
IGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldyaXRl
KSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAo
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKKyAgICAgICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90
eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAg
ICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQo
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVy
dHlHUFIsIHNjcmF0Y2gyR1BSKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBp
c091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6WmVybywg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpKTsKKyNlbHNl
CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIEpTVmFsdWU6Om9mZnNldE9mVGFnKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworI2VuZGlmCisKKyAgICAgICAgICAgIHN0b3JlUmVz
dWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3Ms
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAg
ICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihleHBlY3RlZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lz
dGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgc3Rv
cmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAg
ICAgICAgICAgYXV0byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOwor
ICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0g
aml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7
CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0
YXRlLnNjcmF0Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIo
KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICByZWFkeS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJv
cGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAg
ICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1p
dHRlZCBpbiB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwg
cHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYg
KG1fdHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKICAgICAgICAgICAgIGlzT3V0
T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwor
ICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQu
c3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAg
IGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZN
YXlTdG9yZVRvSG9sZSgpKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHko
KSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7CiAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVu
ZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMg
Y29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhl
IGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorCisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0
b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9y
VHlwZWRBcnJheVR5cGUodHlwZSkpKSk7CisKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIo
dmFsdWVSZWdzKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQo
dHlwZSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJ
bnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgIGF1dG8gZG91YmxlQ2FzZSA9IGppdC5icmFuY2hJ
Zk5vdEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3Vi
bGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAg
ICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UubGluaygm
aml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsK
KyAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9E
b3VibGUoc2NyYXRjaEdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisjZWxzZQorICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyNlbmRpZgorICAgICAgICAgICAgcmVhZHkubGluaygmaml0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIC8vIE91dE9m
Qm91bmRzIGJpdCBvZiBBcnJheVByb2ZpbGUgd2lsbCBiZSBzZXQgaW4gdGhlIG9wZXJhdGlvbiBm
dW5jdGlvbi4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsK
KworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVz
ZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygp
KTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNo
R1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKQorICAgICAgICAgICAgc2NyYXRjaDNHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygKKyAgICAgICAgICAgIGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisKKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBqaXQuY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgZmFsc2UpOworCisgICAgICAgIGppdC5zaWduRXh0ZW5k
MzJUb1B0cihwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChpc0ludCh0eXBl
KSkgeworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IUpTQzo6aXNTaWduZWQodHlwZSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91
bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGF1
dG8gdG9vQmlnID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW4sIHNjcmF0
Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAg
ICAgaml0LnhvcjMyKHNjcmF0Y2gzR1BSLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAg
YXV0byBjbGFtcGVkID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB0b29CaWcubGluaygm
aml0KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigweGZmKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGNsYW1wZWQubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICBpbkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTgoc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gy
R1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc1R3bykpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRm91cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAg
ICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9h
dChzdGF0ZS5zY3JhdGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVGbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHBy
ZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xMzIyLDYgKzE2ODgsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3Mo
KSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
CiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTg5
NCw4ICsyMjYyLDEyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwor
ICAgICAgICBpZiAoc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpCisgICAgICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7CkBA
IC0yMDU4LDYgKzI0MzAsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsK
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2lu
ZDo6UHJvcGVydHlEZWxldGlvbik7CkBAIC0yMTgzLDYgKzI1NTcsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKICAgICBjYXNlIENoZWNrUHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGln
dW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlOgogICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJh
dGVXaXRoR3VhcmQoKSwgc2luY2UgdGhlIGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8v
IGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRl
KCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNpbmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFy
ZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3MuCkBAIC0yMTk2LDIyICsyNTgzLDMxIEBAIFR5cGVkQXJy
YXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlwZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAg
ICByZXR1cm4gVHlwZUludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVVaW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlSW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQx
NjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjg0LDYgKzI2ODAsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJlZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFj
Y2Vzc0Nhc2UmIHJocykKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAppbmRleCA0MTljOTljOTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJl
Li41NjNhMTU1MmFlNDIxNjQ0MDQ2ZDBhYTQxZDIzYjZhZGQ1ZGI2NTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAg
Y2xhc3MgQWNjZXNzQ2FzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNl
PiB7CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xv
YWQsCisgICAgICAgIEluZGV4ZWRJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRDb250aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAg
ICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
LAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVp
bnQ4X3QgewpAQCAtMzUzLDEyICszNjYsMTMgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAg
ICAgICAgIHN0cnVjdCBLZXkgewogICAgICAgICAgICAgS2V5KCkgPSBkZWZhdWx0OwogCi0gICAg
ICAgICAgICBLZXkoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJh
R1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIFBvbHlt
b3JwaGljQWNjZXNzSklUU3R1YlJvdXRpbmUqIHdyYXBwZWQpCisgICAgICAgICAgICBLZXkoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJhR1BSLCBHUFJSZWcgc3R1
YkluZm9HUFIsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMsIFBvbHltb3JwaGljQWNjZXNzSklUU3R1YlJvdXRpbmUqIHdyYXBwZWQpCiAgICAgICAgICAg
ICAgICAgOiBtX3dyYXBwZWQod3JhcHBlZCkKICAgICAgICAgICAgICAgICAsIG1fYmFzZUdQUihi
YXNlR1BSKQogICAgICAgICAgICAgICAgICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKICAgICAgICAg
ICAgICAgICAsIG1fZXh0cmFHUFIoZXh0cmFHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3N0dWJJ
bmZvR1BSKHN0dWJJbmZvR1BSKQorICAgICAgICAgICAgICAgICwgbV9hcnJheVByb2ZpbGVHUFIo
YXJyYXlQcm9maWxlR1BSKQogICAgICAgICAgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRS
ZWdpc3RlcnMpCiAgICAgICAgICAgICB7IH0KIApAQCAtMzc1LDYgKzM4OSw3IEBAIGNsYXNzIFNo
YXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0g
Yi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1f
ZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9z
dHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAgICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09
IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdp
c3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICB9CiAKQEAgLTM4Myw2ICsz
OTgsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgIEdQUlJlZyBtX3Zh
bHVlR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1fZXh0cmFHUFI7CiAgICAgICAgICAgICBHUFJS
ZWcgbV9zdHViSW5mb0dQUjsKKyAgICAgICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsK
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgfTsKIApA
QCAtNDE2LDYgKzQzMiw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAg
ICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0gYi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAg
ICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1fZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAg
JiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9zdHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAg
ICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAg
ICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdpc3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnMpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBvcmRlcmluZyBvZiBjYXNlcyBkb2Vz
IG5vdCBtYXR0ZXIgZm9yIHNoYXJpbmcgY2FwYWJpbGl0aWVzLgogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4gcG90ZW50aWFsbHkgaW5jcmVhc2Ugc3VjY2VzcyByYXRlIGJ5IG1ha2luZyB0
aGlzIGNvbXBhcmlzb24gLyBoYXNoaW5nIG5vbiBvcmRlcmluZyBzZW5zaXRpdmUuCkBAIC00NDUs
NiArNDYyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgIEdQUlJlZyBtX3Zh
bHVlR1BSOwogICAgICAgICBHUFJSZWcgbV9leHRyYUdQUjsKICAgICAgICAgR1BSUmVnIG1fc3R1
YkluZm9HUFI7CisgICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsKICAgICAgICAgUmVn
aXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxSZWZQ
dHI8QWNjZXNzQ2FzZT4+JiBtX2Nhc2VzOwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxTdHJ1
Y3R1cmVJRD4mIG1fd2Vha1N0cnVjdHVyZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgKaW5kZXggNmRjN2IwZTU0NDdmZTA2MGRiY2JkMjRkOTkwOTc1
NjU3OWZjNjU3NC4uOTFkYThmM2VmZjkyZmMzYTg5NTcwZDc1YTRiOTEzYmQyNjMyY2M0YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaApAQCAtMjA4
LDYgKzIwOCw5IEBAIGNsYXNzIEFycmF5UHJvZmlsZSB7CiAgICAgQXJyYXlNb2RlcyogYWRkcmVz
c09mQXJyYXlNb2RlcygpIHsgcmV0dXJuICZtX29ic2VydmVkQXJyYXlNb2RlczsgfQogICAgIGJv
b2wqIGFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gJm1fbWF5U3RvcmVUb0hvbGU7
IH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXlTdG9yZVRvSG9sZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbWF5U3RvcmVUb0hvbGUpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlQcm9maWxlLCBtX2xhc3RTZWVuU3RydWN0dXJlSUQpOyB9
CisKICAgICB2b2lkIHNldE91dE9mQm91bmRzKCkgeyBtX291dE9mQm91bmRzID0gdHJ1ZTsgfQog
ICAgIGJvb2wqIGFkZHJlc3NPZk91dE9mQm91bmRzKCkgeyByZXR1cm4gJm1fb3V0T2ZCb3VuZHM7
IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAppbmRleCA3NjcxZDg3YjFlYTc0OWRjMzQ1NmY3NzY1
YWMwNmM0YThiY2ZiMmIxLi5jMDI1YTdiZjY1MTk0YmRhNGU4MjE1MWQ5Y2IzZjI5Njc4ZGE5Mjc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0xNDEsNiArMTQxLDggQEAgdm9pZCBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3Rh
dGUsIGNvbnMKICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwogICAgIGlmIChzdHViSW5m
by5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5t
X2FycmF5UHJvZmlsZUdQUik7CiAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAKICAg
ICBHUFJSZWcgcGFyYW1CYXNlR1BSID0gSW52YWxpZEdQUlJlZzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdhZDBkZjg4MjEx
MDdmZTNiODQ5MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcyYjRkYzJhMWQx
ODkyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVz
TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBHZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQdXRCeUlkU3Rh
dHVzOworY2xhc3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsKIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3Ry
dWN0IElDU3RhdHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7IG51bGxwdHIg
fTsKICAgICBHZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEluQnlTdGF0
dXMqIGluU3RhdHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dFN0YXR1cyB7
IG51bGxwdHIgfTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAg
IERlbGV0ZUJ5U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCmluZGV4IDQ4NDEw
MTM5ZGMyZjhjMGQ1YzgwYTJmZjkwNWMzYWE2YTEzNWRmYjIuLmMxZWIyZDY5ZDI3NTRlMDUxYTgy
NTlmNjM3N2U2NDcxNGVlYWVlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCkBAIC0yMTYsOCArMjE2LDEyIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIEdQUlJlZyBnZXRTY3JhdGNoUmVnaXN0ZXIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VUYWdHUFIpOwogICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLnZhbHVlVGFnR1BSKTsKICNlbmRpZgorICAgIGlmIChzdHViSW5m
by5wcm9wZXJ0eVJlZ3MoKSkKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVy
dHlSZWdzKCkpOwogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAg
IGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgR1BSUmVn
IHNjcmF0Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgaWYgKGFsbG9j
YXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMzYWRkMWZmZTY2Mjc1ZDkxMTQuLjQw
ZDZhMWY5ZGE1ODI1MjA1NTRhYWMzNGVjMWE0NGU0MjlhZjg2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtNDk0
LDYgKzQ5NCw4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJl
Z2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9jCiAjZW5kaWYKICAgICBpZiAoc3R1
YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVBy
b2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIpOwogCiAgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtODEwLDYgKzgxMiw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpTTG9jCiAgICAgICAgICAgICBzdHViSW5mby52YWx1ZUdQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwKICAgICAgICAgICAgIHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsCisgICAgICAgICAgICBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBrZXlzLAogICAgICAgICAgICAg
d2Vha1N0cnVjdHVyZXMsCkBAIC04NDYsNyArODQ5LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2MKIAogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CiAgICAgICAgIGlmIChjYW5C
ZVNoYXJlZCkKLSAgICAgICAgICAgIHZtLm1fc2hhcmVkSklUU3R1YnMtPmFkZChTaGFyZWRKSVRT
dHViU2V0OjpIYXNoOjpLZXkoc3R1YkluZm8uYmFzZUdQUiwgc3R1YkluZm8udmFsdWVHUFIsIHN0
dWJJbmZvLnJlZ3MudGhpc0dQUiwgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwgc3R1YkluZm8udXNl
ZFJlZ2lzdGVycywgc3R1Yi5nZXQoKSkpOworICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRTdHVi
cy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBzdHVi
SW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgc3R1YkluZm8udXNlZFJlZ2lzdGVycywg
c3R1Yi5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBmaW5pc2hDb2RlR2VuZXJhdGlvbihX
VEZNb3ZlKHN0dWIpKTsKQEAgLTEwMjIsNiArMTAyNSw0NSBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5k
ZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAg
ICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQzOWM3YTRlYTZlNjFjZjU2NDhhZWZh
YzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKLSNpbmNsdWRlICJD
b2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCi0jaW5jbHVkZSAiR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewotICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7Ci0gICAgCi0g
ICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2UgYXJlIG5vdCB5ZXQgdXNpbmcgYGNv
bXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1dF9wcml2YXRlX25hbWVgLgotICAg
IC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1
cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlz
IG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcFB1dFBy
aXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmls
ZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xk
U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwotCi0gICAgU3Ry
dWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwotICAg
IGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgIAot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShieXRl
Y29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAg
ICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBz
dHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci19Ci0KLSNpZiBFTkFC
TEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlu
a1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgIAotICAgIFVOVVNF
RF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGRp
ZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAg
IAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21w
dXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8s
IHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVOQUJMRShKSVQpCi0gICAgVU5VU0VE
X1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOwotICAgIFVOVVNFRF9QQVJB
TShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBy
ZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ss
IHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Ci19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgIGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgU3R1
YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxl
ZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkp
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1hcnkpOwotICAgIAotICAgIHN3aXRj
aCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0Ogot
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWls
ZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5
SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAg
ICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7Ci0gICAgICAgIAotICAg
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1w
bGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3Qt
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAg
ICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRp
b246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwot
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQg
PSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21w
bGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxl
eEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAq
Y2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNh
bGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRl
cigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5v
ZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgICAgICB9IH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6Ci0gICAgICAg
ICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgIH0KLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4
dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17
Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
ID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0
ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUo
YmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAgICBmb3IgKElDU3RhdHVzQ29udGV4
dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBj
b250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIGJsZXNzID0g
WyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5SWRTdGF0dXMgewotICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKLSAgICAgICAg
ICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKLSAgICAg
ICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgs
IHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQotICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7Ci0gICAgICAg
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0g
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBz
dGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJs
ZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMucHV0
U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVN
YXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci19Ci0K
LVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRL
aW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChzZXQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9zdGF0ZSA9
IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2
YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5l
IG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEg
cHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCi0gICAgICAgICAg
ICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgotICAgICAgICAgICAgaWYgKHByaXZh
dGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBpZiAoYXR0
cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBs
YWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBj
cmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgotICAgICAg
ICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhl
Y3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAgICAgICAgICAgICAgICAvLyBnb2lu
ZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBm
cm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZl
biBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5n
eS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRh
a2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2
YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1
cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4g
aGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0Ci0g
ICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1
c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBp
bnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCi0gICAgICAgIC8vIHNsb3cg
cGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgotICAgICAg
ICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMg
aXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRo
aXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkg
Y2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24g
ZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAg
IC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3Qg
YW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAgICAgIC8vIHdlIGRvbid0IHdhbnQg
dG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKLSAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJl
bnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7
Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIH0KLSAgICAK
LSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0
dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZz
ZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlh
bnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7Ci0gICAg
ICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjptYWtlc0Nh
bGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNT
bG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXpl
KFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkU3Rh
dHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhlcikKLXsKLSAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhpcyA9IFB1dEJ5SWRTdGF0dXMoKG1h
a2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBO
b0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsK
LSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgIGNh
c2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgIH0KLSAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0
dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKLXsKLSAgICBpZiAobV9zdGF0ZSAh
PSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1f
dmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0YXRlID0gTm9J
bmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0
aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBvdXQucHJpbnQoIigiLCBs
aXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgp
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIG91dC5w
cmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2OWFjNTcxM2RjOGU4ZjhiNjQ0MDAw
Y2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0
dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCi0j
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3Mg
U3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29k
ZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0
dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVu
dW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3Jt
YXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFz
IGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICAv
LyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICBUYWtlc1Nsb3dQ
YXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxz
LgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKCkK
LSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQotICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8
IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOwotICAg
IH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1t
YXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7Ci0gICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5m
b3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1t
YXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAg
ICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLSAg
ICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAgICAgIG1fdmFyaWFudHMuYXBwZW5k
KHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2
YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0
dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQotICAgIGJvb2wgdGFrZXNTbG93
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRl
ID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICBQdXRC
eUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IG51bVZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJp
dmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAotICAgICAgICBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRpZgotICAgIHN0YXRpYyBQdXRCeUlk
U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1
dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgIAotICAgIFN0YXRl
IG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1
NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFmMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLQotI2luY2x1ZGUgIkNh
bGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFu
dCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsK
LX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0
QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKLSAgICBt
X29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwotICAgIG1fbmV3U3RydWN0dXJl
ID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2Nv
bmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwotICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1
ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5
SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKLSAgICByZXN1
bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwotICAgIHJl
c3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9uZXdTdHJ1
Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQotewotICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOwotICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5t
X2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVw
bGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXpl
KCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICBt
X2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Ci19Ci0K
LWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAotewotICAgIHN3
aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgIGNhc2UgU2V0dGVyOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGNhc2UgU2V0
dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKLX0KLQotYm9vbCBQdXRCeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAg
IGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAg
ICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShv
dGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwotICAgICAgICAgICAgaWYgKG5ld1Zh
cmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7Ci0gICAg
ICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6Ci0gICAg
ICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIp
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAg
aWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0dXJlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbmV3U3Ry
dWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRp
dGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0
ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgIGlm
IChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0
YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIu
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9u
U2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5t
X2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1Zh
bGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbmRp
dGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVy
Z2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0K
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpCi17Ci0gICAgQVNTRVJUKG1f
a2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFj
ZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwotICAgIEFTU0VS
VCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAgIEFTU0VSVCghcmVwbGFjZS5yZWFs
bG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNF
bXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdo
ZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gK
LSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3
YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Ci0gICAgLy8gd29yayBpZiB3
ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBw
b2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1fb2xkU3RydWN0dXJl
Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
bV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1w
bGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1i
b29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgaWYgKCFtX29sZFN0
cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZl
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYm
ICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0K
LQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAg
IGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgIG91dC5wcmludCgKLSAg
ICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
Iiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQs
IGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQp
LCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCks
ICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Ci0gICAg
ICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICBv
dXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVlNWYwYTFkZTQwOGE1ZmJiZDFjYjdh
YjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua1N0YXR1czsK
LQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5vdFNldCwKLSAgICAgICAgUmVwbGFj
ZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0dGVyCi0gICAgfTsKLSAgICAKLSAg
ICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5kKE5vdFNldCkKLSAgICAgICAgLCBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFy
aWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlh
bnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVy
ZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
dHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlh
bnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0
JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0
aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3Ry
dWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5l
Y2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7Ci0gICAgYm9v
bCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25z
dDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlm
IHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgSW50
cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9Ci0KLSAgICAv
LyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgYm9vbCBpc1Byb3Bl
cnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBDYWxsTGlua1N0YXR1cyogY2FsbExp
bmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIp
OwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsKLSAgICB9Ci0KLSAgICBi
b29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhl
ci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2Up
OwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owot
ICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3Ry
dWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlu
a1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE1YjA5YzhhNWU5MTNk
NzdlZGViNzNlNmYxZDYyNWZjMmRmMmU4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1NDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKKworI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBsZXhH
ZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVk
ZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIFB1
dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKK3sK
KyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwor
fQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV92YXJpYW50cy5z
aHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOworICAgIAorICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6
CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJldHJpZXZpbmcgTExJbnQgaW5mb3Jt
YXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAgICAgICAgLy8gV2UgY2FuIGFkZCBz
dXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5j
ZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBv
biBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllciA9ICYo
cHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwoKTsKKworICAgIFN0cnVjdHVy
ZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIXN0
cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7Cisg
ICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkp
KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0s
IHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFB1dEJ5VmFyaWFu
dDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1B1dEJ5U3RhdHVzOjpQdXRCeVN0
YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpO
b0luZm9ybWF0aW9uOgorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNT
bG93UGF0aDoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2Vy
dmVkVGFrZXNTbG93UGF0aCA6IExpa2VseVRha2VzU2xvd1BhdGg7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Cisg
ICAgICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZlZFNsb3dQYXRo
QW5kTWFrZXNDYWxscyA6IE1ha2VzQ2FsbHM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFw
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1Yklu
Zm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRC
bG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8v
IEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BBUkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRp
ZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4g
Y29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJ
bmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGlu
ZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorewor
ICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnko
cHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1
bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoc3VtbWFyeSwgKnN0dWJJbmZvKTsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgeworICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgIAor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAg
ICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5m
by0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAg
ICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0
KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoYWNj
ZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0
QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNp
dGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGFjY2Vzcy5u
ZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vz
cy5pZGVudGlmaWVyKCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy51
aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4
R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1
czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNT
bG93UGF0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3Rh
dHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhdXRvIHZh
cmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1
cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9u
U2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5z
aHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQoreworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOworICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2Fs
bEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2Vs
aW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRD
YWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJ
Q1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0
dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAg
YXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0
dXMgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsK
KyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3Io
CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29k
ZUluZGV4LCBkaWRFeGl0LAorICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsK
KyAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisg
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBz
dGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1
cykKKyAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBi
eXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0
dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
Ym9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQor
eworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlm
IChwYXJzZUluZGV4KCp1aWQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9m
ZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQor
ICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRl
IGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAgICAgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxk
UHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhM
aWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNT
bG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRh
a2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQg
dmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhh
dmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAg
ICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNl
IGl0IG1lYW5zIHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5z
dGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBh
dGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAg
aWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNp
cyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQg
dGhpcyBpcyByZWFsbHkKKyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0
eSBjaGVja3MuCisgICAgCisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBv
biBkaWN0aW9uYXJpZXMuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisg
ICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQg
aXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0
IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Cisg
ICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFs
cmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICghdHJhbnNpdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgQVNTRVJU
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAgIGJvb2wgZGlkQXBwZW5kID0g
cmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGlkZW50aWZpZXIs
IHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
aWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1czo6bWFrZXNDYWxs
cygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0
aW9uOgorICAgIGNhc2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgTWFrZXNDYWxsczoK
KyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFNpbXBsZTogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Zh
cmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFr
ZXNDYWxscygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAoreworICAgIGlmIChvYnNlcnZlZFN0cnVjdHVyZVN0
dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMo
KSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRo
KTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IExp
a2VseVRha2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVz
OjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmll
ckZvcklDU3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShW
TSYgdm0pCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CisgICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpt
ZXJnZShjb25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUg
PT0gTm9JbmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBtZXJnZVNsb3cg
PSBbJl0gKCkgeworICAgICAgICBpZiAob2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRo
KCkgfHwgb3RoZXIub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCisgICAgICAg
ICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxs
cygpKSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgfTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2Ug
Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0g
U2ltcGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewor
ICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6Cisg
ICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAg
IGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiBtZXJn
ZVNsb3coKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBQdXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQor
eworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZpbHRl
cklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKKyAgICBmb3IgKFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRv
UmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBvdXQucHJpbnQo
IigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCJMaWtlbHlUYWtlc1Ns
b3dQYXRoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0
aDoKKyAgICAgICAgb3V0LnByaW50KCJPYnNlcnZlZFRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCJNYWtlc0Nh
bGxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtl
c0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZjNDY4YTI4NmViNWZi
NzFmOTE3YjgwODRjY2RjYTBmNGEyMjhiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgi
CisjaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2Ns
YXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hh
aW47CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmln
aW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1Yklu
Zm9NYXA7CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNh
Y2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAor
ICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisg
ICAgICAgIFNpbXBsZSwKKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFrZSB0aGUgc2xvdyBw
YXRoLgorICAgICAgICBMaWtlbHlUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtub3du
IHRvIHRha2Ugc2xvdyBwYXRoLiBXZSBhbHNvIG9ic2VydmVkIHRoYXQgdGhlIHNsb3cgcGF0aCB3
YXMgdGFrZW4gb24gU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIE9ic2VydmVkVGFrZXNTbG93
UGF0aCwKKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFrZSB0aGUgc2xvdyBwYXRoIGFuZCB3
aWxsIG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMsCisgICAgICAgIC8vIEl0IGtub3du
IHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLiBXZSBhbHNvIG9ic2VydmVkIHRoYXQgdGhl
IHNsb3cgcGF0aCB3YXMgdGFrZW4gb24gU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIE9ic2Vy
dmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzLAorICAgIH07CisgICAgCisgICAgUHV0QnlTdGF0dXMo
KQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCisgICAgeworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIHN3aXRjaCAobV9zdGF0
ZSkgeworICAgICAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIGNhc2UgTGlrZWx5VGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXND
YWxsczoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3R1Yklu
Zm9TdW1tYXJ5LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFB1dEJ5U3RhdHVzKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAg
ICB7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYs
IEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsK
KyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFN0cnVjdHVyZVNldCYsIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZh
dGVGaWVsZFB1dEtpbmQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0
YXR1c0NvbnRleHRTdGFjayYsIENvZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBz
dGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBMaWtl
bHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7CisgICAgYm9vbCBvYnNlcnZl
ZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE9i
c2VydmVkVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtl
c0NhbGxzOyB9CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiYg
dmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0QnlW
YXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhd
OyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5nbGVJ
ZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0
QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0aWMg
UHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsK
KyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9y
PFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5j
cHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJp
YW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFu
dCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQoreworICAg
ICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVyYXRv
cj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tp
bmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBtX25l
d1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAg
ICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRlbnRp
ZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1dEJ5
VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAg
cmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50
IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJhbnNp
dGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVyKENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikp
OworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
ID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsK
KyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3Ry
dWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFjZTsK
KyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFyaWFu
dDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtpbmQo
KSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25z
dCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1faWRl
bnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5v
dFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAgICBB
U1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKKyAg
ICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBs
YWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlv
bldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRp
b246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlm
ICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VkQ29u
ZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNl
dHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8
IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtT
dGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0
Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFtZXJn
ZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xv
dEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAg
IAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExpbmtT
dGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAgICAg
IG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpCit7
CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFjZS5t
X2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZz
ZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFTU0VS
VCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2lu
ZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBu
ZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0
aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Cisg
ICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJl
cGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNTdG9y
YWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5tX29s
ZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVy
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
K30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQoreworICAg
IGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0
cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jYWxs
TGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjwi
KTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVtcHR5
PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAg
ICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgb3V0
LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0
KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIs
ICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6CisgICAg
ICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1
cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtTdGF0
dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBSZXBs
YWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAgIAor
ICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgICAg
IDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAg
ICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVyKFdU
Rk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlhbnQo
Y29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29uc3Qg
UHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAgIAor
ICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwg
a2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIHZv
aWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRp
dGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3Ig
U2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZv
ciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyBy
ZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVy
Lm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNl
dCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAgIEtp
bmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVyZVNl
dCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0
ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAgICBD
YWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcuLmZj
ZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYyLDEw
ICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVz
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0YXR1
cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewotICAg
IGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0YXR1
c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0dXMq
IHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdh
dGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZvciAo
YXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vjb25k
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5ODNk
YmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1
c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMqIGFk
ZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRkSW5C
eVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERlbGV0
ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgRGVs
ZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAg
ICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0
ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1cz4+
PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM+
Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNlYjIz
ZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3ODE5
ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2Nr
KiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRH
ZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJRChj
b2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQdXRC
eShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxvY2ss
ICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4ZTZl
MjUwMWFhYjE4ZTU1ZDQxYTQuLmU2N2JjMTA4YmUzMjBkZDZkMjU5ZTc3YzgxYjlkNTFjNDVjZjU4
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFsLAot
ICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAgICBJ
bkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtMzY1LDYgKzM2Niw3IEBAIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgR1BSUmVnIGJyYW5kR1BSOwogICAgIH0gcmVnczsK
ICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcg
bV9hcnJheVByb2ZpbGVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFI7CiAgICAgLy8gRklYTUU6IFszMi1iaXRzXSBDaGVj
ayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMxN2Iy
ODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0
b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRT
dGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVj
dHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVy
KGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3ICsz
OTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVl
Lm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBpZiAo
dGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVhbGx5
IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQw
LDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJl
Y3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBhdXRv
IHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZCA/
IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUo
KTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUudG9T
dHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVy
KCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAog
ICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAg
ICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBu
ZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ3
Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRPSzoK
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTQ2
NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgp
KQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1
Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1cygp
LT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQyMGRm
YjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUzODZi
NjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xhc3Mg
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi5iNjI0NzhlZjQ2NmU2
YjZiNzI5NDY4NTNiNzAxZmQyZWQyYmQwZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUg
IkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03NCw3
ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHJp
dmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUg
IlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJl
Z0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2lu
Y2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBCeXRl
Q29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYp
OwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0g
ICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9m
IFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5k
IHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAgIE5v
ZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAg
ICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMp
OwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJl
Y3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Tm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2Rl
KTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25z
dCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3Rh
dHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgs
IEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAgICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtp
bmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2YXRl
RmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUpOwpA
QCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAg
ICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4gb25s
eSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24g
dGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlvdXNs
eSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVj
dHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50
LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1
cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVs
ZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5
U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmln
aHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZlciwg
dGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBm
dXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5Myw5
ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxvYWRl
ZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZh
bHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxh
Y2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0
dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2
YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5v
ZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAot
ICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFs
dWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVD
TUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9v
bCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQogICAg
ICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFwaChw
dXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAgICBh
ZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5
SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFN
b2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwg
Qnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIGlm
ICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRC
eUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygp
KSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3Qs
IGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFu
LmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0
dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZU
TCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6
OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
Z0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAg
fHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJl
Y3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBp
ZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0
QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgICAg
IGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUs
IHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCArNTAz
OCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAo
VU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29t
cGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAg
ICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJp
YW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0
QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0
dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJp
YW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJh
c2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVt
VmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRC
eVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2Fz
ZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1
dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2Up
OworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFz
ZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFs
dWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUw
NjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJp
YW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMs
IGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJp
YW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMo
Y3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1
dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVmYXVs
dDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1dEJ5
SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1
cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0
dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAg
ICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZv
cmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcElu
Zm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8
fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0
QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1v
cnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUo
KSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6
Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
cHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJ
ZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAg
ICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAo
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewog
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0
YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRz
KCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAg
ICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAg
IGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkg
PT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07
CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewogICAg
ICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRT
dGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0
YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgc3Rv
cmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAo
VU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7
CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJUKHBy
aXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFz
ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZz
ZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
OwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJ
ZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1f
YmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUlu
ZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5
dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVj
b21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8g
aW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29tZSBp
bmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hlZCBj
ZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjc3
OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAgICYm
IGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQ
dXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZh
bEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5p
c1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAg
ICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAg
ICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3Rh
Y2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAg
ICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5n
bGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRl
bnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
aXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJ
bmZvKHVpZCksIHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2
YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0
YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGls
ZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5m
byhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYs
MTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1f
ZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVz
IHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAg
ICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21h
TW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5
U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFN
b2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAg
fQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xv
YmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwog
ICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFs
c2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZp
ZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVz
OjpMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1sw
XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwg
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTg4MTQsNjIgKzg4MDMsNDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VDb2RlQmxvY2soKQogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVj
b2RlSW5kZXggb3NyRXhpdEluZGV4KQogeworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29k
ZS5tX2Jhc2UpOwogICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkp
OwogICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNE
aXJlY3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAg
Ym9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlk
U3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwotICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5t
X2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJ
bmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVj
b2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21l
cyBudWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1h
dGlvbi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlW
YWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93
UGF0aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAm
JiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmll
ci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogCisgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBt
X2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50
Q29kZU9yaWdpbigpKTsKKworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAgICAgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVy
KCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRl
bnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2Vs
bCgpKSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
ZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3Vy
cmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBi
eXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1
ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAgICAgICAg
ICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNt
YU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKLSAgICAgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKIAogICAgICAg
ICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkp
OwogICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KG51bGxwdHIpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICBh
ZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgotICAgICAg
ICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1
dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNt
YU1vZGUpKTsKKyAgICAgICAgTm9kZSogcHV0QnlWYWwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gUHV0QnlWYWwgYW5kIFB1dEJ5VmFsRGlyZWN0IG11c3QgYmUgdHJlYXRl
ZCBhcyBpZiB0aGV5IGNsb2JiZXIgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFr
ZSB0aGVtIGdlbmVyaWMuCisgICAgICAgIGlmIChzdGF0dXMub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHVi
SW5mb1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmFkZChw
dXRCeVZhbCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZm
MjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRl
eCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1
MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBAQCBib29s
IGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhj
ZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
ICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBA
IC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAg
ICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3Ry
dWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVw
bGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFu
dC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3
IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
bm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVk
Z2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2
b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNv
bnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hp
bGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRv
UHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBu
b2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgaWYgKGRp
ZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBO
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFz
cyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFz
ZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAor
ICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAg
ICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAg
ICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUt
PmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmll
bGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4
ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0
aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3
U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtp
bmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0
Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7
CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3Rh
dHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBFZGdlKGJh
c2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5l
NjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2
YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5lMjViMWYzODU0OTM1NGFlMTMyYWRkYmNiNjhhY2I5
ZGE4MGI1Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKQEAgLTEyMzYsNiArMTIzNiwxMCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNlPihjaGlsZDIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGNoaWxkMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAg
IC8vIER1ZSB0byByZWdpc3RlciBwcmVzc3VyZSBvbiAzMi1iaXQsIHdlIHNwZWN1bGF0ZSBjZWxs
IGFuZApAQCAtMjg2NSw3ICsyODY5LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZjOWRjNDM5
NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5NTA4NzYz
OGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTM4NSw4
ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIq
IHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0YXR1cygp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwotICAgIGlm
IChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgKm5v
ZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVzKCkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAgIGlmIChu
b2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
ZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSk7
CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CmluZGV4IDYyYTFmZWYzZGMyY2RkZTEwOTE1MjRkNjczNDA4NDBmZDNmMjYwYjEuLjFiZWM4ZGVl
ZDlkYmRiYTUwN2Q5YTNmYjFiMDM5ZTI2ZWUxYWRkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKQEAgLTEyMDIsNiArMTIwMiw3IEBAIGNsYXNzIEdyYXBoIGZpbmFsIDogcHVi
bGljIHZpcnR1YWwgU2Nhbm5hYmxlIHsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0
cnVjdHVyZTsKIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd0dldEJ5VmFsOworICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fc2xvd1B1dEJ5VmFsOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZj
OWRiMWE3YzU0NGZhMWNhOThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5
YTc5MTg0MmU4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0
aFRoaXMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxz
LCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5r
QnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFh
NDA5NGY1NzA2MGE3Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkx
YjI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAt
MTk5LDYgKzE5OSwxMSBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMg
ewogICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJ
ZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlW
YWwoY29uc3QgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3Jh
cHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAg
IHZvaWQgYWRkRGVsQnlJZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRo
R2VuZXJhdG9yKiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElu
bGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBA
IC0zNjAsNiArMzY1LDcgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJz
IHsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElu
bGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9w
dXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJh
dG9yPiwgND4gbV9kZWxCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRJbkJ5SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2
NGYwZDZmNDY0NjY0ZDBmLi4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsx
MDYsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0
YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5Ogog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFk
Mjc3YTE5YmQxYzlhLi43Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAj
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxv
Y2F0aW9uLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAK
IHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcjsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3Rv
cjxQdXRCeVZhcmlhbnQsIDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0z
MjEwLDE1ICszMjEwLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPEluQnlTdGF0dXMqPigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0
dXMoKQorICAgIGJvb2wgaGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gRmlsdGVyUHV0QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVy
UHV0QnlTdGF0dXM7CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0
dXMoKQorICAgIFB1dEJ5U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NF
UlQoaGFzUHV0QnlJZFN0YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5
SWRTdGF0dXMqPigpOworICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAg
IHJldHVybiBtX29wSW5mby5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBo
YXNEZWxldGVCeVN0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggZTc1YmNmZThhMWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2Zk
YWM4ZjIzNTE4Mjg3MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oRmlsdGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1h
Y3JvKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhG
aWx0ZXJQdXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRl
bGV0ZUJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJT
ZXRQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRl
eCBiMWNmZWU4YWNlYzM4Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4
YjFjNGNmYTZhMzExMDI4Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMTUsMjEgKzIx
NSw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVy
UmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2FzZSBJbmxpbmVDYWxs
RnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJD
YWxsOiB7Ci0gICAgICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3Bf
cHV0X2J5X3ZhbCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUgb3BfcHV0X2J5X3Zh
bCBhcyBQdXRCeUlkIGFuZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVuIHdlIGZvdW5kIFN0
cnVjdHVyZVN0dWJJbmZvIGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAgICAgICAgICAgICAg
Ly8gQnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZpbmQgU3RydWN0dXJl
U3R1YkluZm8gaGVyZS4gTGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpby4KLSAg
ICAgICAgICAgICAgICAvLyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlzIGNvbXBpbGVkLgot
ICAgICAgICAgICAgICAgIC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAgICAgICAgICAgICAg
Ly8gMy4gU2luY2UgKEEpIGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcHV0X2J5X3Zh
bCwgKEIpIGNhbiBnZXQgU3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQg
YXMgaW5saW5lZCBTZXR0ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0LiAoQSkncyBKSVRE
YXRhIGlzIGRlc3Ryb3llZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNv
bWVzIExMSW50LgotICAgICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxvY2sgaW5saW5pbmcg
KEEpIGdldHMgT1NSIGV4aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkg
Z2V0cyBCYXNlbGluZSBDb2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgLy8gNi4gKEIp
IGdldHMgT1NSIGV4aXQuIChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJ
bmZvIGluIChBKSBmb3IgUHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBk
b2VzIG5vdCBleGlzdCBzaW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQgb25jZS4KLSAgICAg
ICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5maW5kQnlWYWxJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBieVZhbEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4o
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1
YkluZm8tPmRvbmVMb2NhdGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKaW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhm
ZDU4YS4uMWY0MTgzMThhNGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKQEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0
eXBlIGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
dCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVl
IGhhcyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRl
dmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShu
dWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcg
QEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5
U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYy
ZWNlODBmZTc0ZjIuLjg5ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01h
cFNldDoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRi
OWM5YTVhMjAuLmQ1NDk2NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyAr
MzU5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZTMyNDdm
OGM2OTI2ZDI5N2I2Y2EyY2YxNGUyZDZiNWQ5OTNlYjZiLi42MDNmZjdiMmU1MmRjZWVlM2JjMzY1
ZGJjNGVlMzNiM2MzN2UxZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3
OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uZDQ1NWNhNGU2OGU0NzBiZDRiOTZiZTBhZTFhOTAyOWQ3
YmVhY2VhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCkBAIC0zMTc3LDM0ICszMTc3LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgp
ID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5vcCgpKTsKLQotICAgICAgICAgICAgaWYgKGNoaWxk
MS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JDZWxsV2l0aFN0cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5z
KG5vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQo
KSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQo
KSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckNlbGxXaXRoU3RyaW5nKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVz
ZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yQ2VsbFdpdGhTeW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcyKHRoaXMsIGNoaWxkMik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0
aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIo
KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOworICAgICAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlW
YWxEaXJlY3QpCisgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1v
ZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRp
b25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
ZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAg
ICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBjaGlsZDEpOwotICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGlsZDIpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMyh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcx
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIs
IGFyZzNHUFIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBjaGlsZDIsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1
YkluZm87CisgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Cisg
ICAgICAgICAgICAgICAgc3R1YkluZm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGNoaWxkMik7CisgICAgICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgY2hpbGQzKTsKKworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAg
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbm9kZS0+ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIElu
dmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAg
ICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
CisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICAgICAgICAgIGF1dG8gb3BlcmF0
aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9qaXQuYWRkUHV0QnlWYWwoZ2VuLCBzbG93
UGF0aC5nZXQoKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7CisKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01ODcxLDcgKzU5MzEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAKaW5kZXggYjkwNjY1ZWNjZTUyYzU3ZjQ0YjcwZDQ2N2M0YTRlNWE1ZjM3MDJlMC4uOTMx
YmFiNTAzMzYxZTk3MjBmNzJiZDY2NzE5YjdhNjE3ZWQ5ZDM2NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAKQEAgLTIzMyw2ICsyMzMsMTUgQEAgY2xhc3MgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFy
cmF5OgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OiB7CisgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDApOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSB8fCBjaGlsZDEudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnNpZGVyQmFycmllcihjaGlsZDEsIGNoaWxkMyk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDU0MTBk
OTA4OTZkYzRmMDEwNTc5MzBkZjgyZjY2MTkyYjgxZjZjMGYuLmM1ZTVjZjM2YTc3MGQxNTgzYjY5
M2RmZDg4MWQ2NDI0YWIxN2JjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCkBAIC0zMTIsOCArMzEyLDggQEAgY2xhc3MgVmFsaWRhdGUgewogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6
CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlKSwgIXZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRj
aCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKaW5kZXggZmRhNjRkMzVk
YTM0Mjg4OWM3OThjMDUxZTk1NzZlOGExZTMzYTM5Yi4uZjFhMzgwOWQ3ZWZlMzBmOGQ1OWJhMjFm
YWNkMDcwOWU0MzhiOTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgY2xh
c3MgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6
CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgpAQCAtNDIxLDcgKzQyMSw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAg
IGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlT
dGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDAzZjg2NTJjNmNi
ODJjNjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMuLjgzYjUxYmE5Y2Y3NjVkYTA0NjM3M2E3OWIx
Y2EwMzMwYzQzYzdhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKQEAgLTQwNyw3ICs0MDcsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE1hdGNoU3RydWN0dXJlOgogICAgIGNhc2Ug
RmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBj
YXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoK
ICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDVhM2U5OGY3NTM3MDFkM2Iz
NGY4NGI5ODA4M2QyNGRhZThlZjcxMDAuLjFiMGVmMzljNTUxMTIxODI1OTU5NzY4ZjE0OWRmMGQ4
NmY5ZmFkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKQEAgLTE2NDksNyArMTY0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVz
OgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlcklu
QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC01NTU2LDU3ICs1NTU2LDE1NSBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgogICAgICAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKICAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSkgewotICAgICAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dDQ0ogb3BlcmF0aW9uID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVj
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0
cmljdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0Q2VsbFN0cmluZ1N0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdENlbGxTdHJpbmdOb25TdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlz
U3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsU3RyaW5nU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsQ2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1
dEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkgfHwgKGNoaWxkMS51c2VLaW5kKCkgIT0gQ2VsbFVzZSAm
JiBjaGlsZDEudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIFZf
SklUT3BlcmF0aW9uX0dDQ0ogb3BlcmF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdENlbGxTdHJpbmdTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdENlbGxTdHJpbmdOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFN
b2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5nU3RyaWN0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5nTm9uU3RyaWN0OworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJh
dGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTdHJp
bmcoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2bUNh
bGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNo
aWxkMSksIGxvd1N0cmluZyhjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1i
b2xTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9s
Tm9uU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbFN0
cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3Q7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJvbFVzZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERp
cmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2Rl
KCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sTm9uU3RyaWN0OworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbFN0cmlj
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0
cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0Nl
bGwoY2hpbGQxKSwgbG93U3ltYm9sKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTeW1ib2woY2hpbGQyKSwgbG93SlNWYWx1ZShj
aGlsZDMpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25fR0pKSiBvcGVyYXRp
b247Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmljdDsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0OwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25fR0pKSiBv
cGVyYXRpb247CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERp
cmVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3Q7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZtQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLAorICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxvd0pTVmFsdWUo
Y2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB2bUNhbGwoCi0gICAg
ICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAot
ICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBs
b3dKU1ZhbHVlKGNoaWxkMykpOworCisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwor
CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwoY2hpbGQxKTsKKyAgICAgICAgICAg
IExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0pTVmFsdWUoY2hpbGQyLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZDMsIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShjaGlsZDIp
OworICAgICAgICAgICAgc3BlY3VsYXRlKGNoaWxkMyk7CisgICAgICAgICAgICBib29sIHByb3Bl
cnR5SXNTdHJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgcHJvcGVydHlJc0ludDMyID0g
ZmFsc2U7CisgICAgICAgICAgICBib29sIHByb3BlcnR5SXNTeW1ib2wgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChhYnN0cmFjdFZhbHVlKGNoaWxkMikuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAg
ICAgICAgICAgICAgIHByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoYWJzdHJhY3RWYWx1ZShjaGlsZDIpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAoYWJz
dHJhY3RWYWx1ZShjaGlsZDIpLmlzVHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKworICAgICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFNvbWVSZWdpc3Rlcihwcm9wZXJ0eSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRTb21lUmVnaXN0ZXIodmFsdWUpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1f
bm90Q2VsbE1hc2ssIFZhbHVlUmVwOjpsYXRlUmVnKEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX251bWJlclRhZywgVmFsdWVS
ZXA6OmxhdGVSZWcoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gMSA6IDA7CisKKyAgICAgICAgICAgIFJlZlB0
cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPSBwcmVwYXJlUGF0
Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisKKyAgICAgICAgICAgIFN0YXRlKiBz
dGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICAgICAgQ29kZU9yaWdpbiBub2RlU2VtYW50aWNP
cmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgICAgICBFQ01BTW9kZSBlY21h
TW9kZSA9IG1fbm9kZS0+ZWNtYU1vZGUoKTsKKyAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBt
X25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Q7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmNvZGVPcmlnaW5z
LT5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGVTZW1hbnRpY09yaWdpbik7CisKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBkaXJlY3QgZXhpdCB0YXJnZXQgZm9yIG9wZXJhdGlvbiBj
YWxscy4KKyAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0
aW9ucyA9IGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVt
cHMoaml0KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGV4aXQgZm9yIGNhbGwg
SUMncyBjcmVhdGVkIGJ5IHRoZSBJQyBmb3IgZ2V0dGVycy4gV2UgZG9uJ3QgaGF2ZQorICAgICAg
ICAgICAgICAgIC8vIHRvIGRvIGFueXRoaW5nIHdlaXJkIG90aGVyIHRoYW4gY2FsbCB0aGlzLCBz
aW5jZSBpdCB3aWxsIGFzc29jaWF0ZSB0aGUgZXhpdCB3aXRoCisgICAgICAgICAgICAgICAgLy8g
dGhlIGNhbGxzaXRlIGluZGV4LgorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2No
ZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAg
ICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gcGFyYW1zWzBdLmdwcigpOworICAgICAgICAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSBwYXJhbXNbMl0uZ3ByKCk7CisgICAgICAgICAgICAgICAg
R1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkg
PyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKKworICAgICAgICAgICAgICAg
IGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAorICAg
ICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNl
bWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gcHJvcGVydHlJc1N0cmluZzsKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHBy
b3BlcnR5SXNJbnQzMjsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSBwcm9wZXJ0eUlzU3ltYm9sOworCisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICBwYXJhbXMu
YWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklU
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGlu
aygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0
aEJlZ2luID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBzbG93UGF0aENhbGw7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0g
aXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5l
cmF0b3ItPnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy5nZXQoKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBJbnZhbGlkR1BSUmVn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKS5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbiwgSW52YWxpZEdQUlJlZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGdlbmVyYXRvci0+c3R1YkluZm8oKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxs
cHRyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci0+cmVwb3J0U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRoQ2FsbCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6
ZShsaW5rQnVmZmVyLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC04OTUxLDcgKzkwNDksNyBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZh
cmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXSk7CiAgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQo
c3RydWN0dXJlKTsKQEAgLTg5NjYsMTYgKzkwNjQsMTYgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlh
bnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAg
ICAgICBQdXRCeVZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAKICAgICAgICAg
ICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0g
YmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50
LmtpbmQoKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkp
OwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5
KAogICAgICAgICAgICAgICAgICAgICBtX29yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIo
KSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtODk4Nyw3ICs5MDg1LDcgQEAgY2xhc3Mg
TG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2
YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlh
bnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9PSB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlubGluZVR5
cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5saW5lVHlw
ZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS50eXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5y
YgppbmRleCA2OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4Li43OGZkNDk0
M2Y5ZWNiYzRjMzVjN2NkY2IzMmI3Mzc3Y2FiOWYxZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL0RTTC5yYgpAQCAtMTQxLDcgKzE0MSw3IEBAIGRlZiBzZWxmLndyaXRlX2J5dGVj
b2RlX3N0cnVjdHMoYnl0ZWNvZGVfbGlzdCwgYnl0ZWNvZGVfc3RydWN0c19maWxlbmFtZSkKICNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIK
ICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1
cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgi
CiAjaW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRz
LmgKaW5kZXggZjA0YzFmNDI4ZTEwYmZjNzFmYTVjZTM1ZTAwMjg2OGJiNzhhZGVmNi4uOTFiM2Iz
MTU1MTBkYTY4MjRiM2M5NjM0MTBlMzM2ZDk1ODlhYmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmgKQEAgLTY3LDEwICs2NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNy
byhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KSBcCiAgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKICAgICBt
YWNybyhPcGVyYXRpb25QdXRCeUlkUHV0UHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6ZSkg
XAotICAgIG1hY3JvKFB1dEJ5SWRBZGRBY2Nlc3NDYXNlKSBcCi0gICAgbWFjcm8oUHV0QnlJZFJl
cGxhY2VXaXRoSnVtcCkgXAotICAgIG1hY3JvKFB1dEJ5SWRTZWxmUGF0Y2gpIFwKLSAgICBtYWNy
byhJbkJ5SWRTZWxmUGF0Y2gpIFwKKyAgICBtYWNybyhQdXRCeUFkZEFjY2Vzc0Nhc2UpIFwKKyAg
ICBtYWNybyhQdXRCeVJlcGxhY2VXaXRoSnVtcCkgXAorICAgIG1hY3JvKFB1dEJ5U2VsZlBhdGNo
KSBcCisgICAgbWFjcm8oSW5CeVNlbGZQYXRjaCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdp
dGhKdW1wKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMpIFwKICAgICBtYWNy
byhPcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKaW5kZXggYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThlZmE0NzEzMi4uNTBk
ZTg1NWI2YWM5MGVlNmQzZDFjOTYxZTQ0ODQ4MjM5NWE0NjE2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcApAQCAtNTEwLDYgKzUxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgbV9nZXRCeVZhbEluZGV4ID0gMDsKICAgICBtX2dldEJ5SWRXaXRoVGhp
c0luZGV4ID0gMDsKICAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRCeVZhbEluZGV4
ID0gMDsKICAgICBtX2luQnlJZEluZGV4ID0gMDsKICAgICBtX2luQnlWYWxJbmRleCA9IDA7CiAg
ICAgbV9kZWxCeUlkSW5kZXggPSAwOwpAQCAtNjYyLDYgKzY2Myw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkSW5kZXgg
PT0gbV9nZXRCeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZFdpdGhU
aGlzSW5kZXggPT0gbV9nZXRCeUlkc1dpdGhUaGlzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9wdXRCeUlkSW5kZXggPT0gbV9wdXRCeUlkcy5zaXplKCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKG1fcHV0QnlWYWxJbmRleCA9PSBtX3B1dEJ5VmFscy5zaXplKCkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG1faW5CeUlkSW5kZXggPT0gbV9pbkJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9pbnN0YW5jZU9mSW5kZXggPT0gbV9pbnN0YW5jZU9mcy5zaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPT0gbV9wcml2YXRlQnJhbmRB
Y2Nlc3Nlcy5zaXplKCkpOwpAQCAtOTA5LDYgKzkxMSw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKKyAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
NmM0ZjExZjY4ZTkwM2ViYTY3YzZkN2VhOTM4N2Q4MWI0NTZhZTBmNS4uNmMzNGFjNjczYTI4MmM4
OGJhMWViY2ZjNGFjZTE4NTVmYTAyMzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0y
MjUsMjggKzIyNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2
bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0
KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5
VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1v
ZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGly
ZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29k
ZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbERpcmVjdD4obG9ja2VyLCBieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQo
dm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJv
cGVydHlOYW1lKTsKLSAgICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRQ
cml2YXRlTmFtZVdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKQEAgLTI2NywxNiArMjQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgbGluaygpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29t
cGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlR2V0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1
dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRy
LCBDYWNoZWFibGVJZGVudGlmaWVyKTsKIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwotCiAgICAg
ICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9u
IGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewpAQCAtMzgyLDM4ICszNTIsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoT3AgYnl0ZWNvZGUpOwogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlT3V0
T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAgCi0gICAgICAgIEpJ
VEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAg
ICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29u
dGFpbnMgaW5kZWNpbmcgdHlwZS4KLSAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5v
dCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKLSAgICAgICAgLy8gemVy
by1leHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHBy
b2ZpbGVkLgotICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEludDMyUHV0QnlWYWwoT3Ag
Ynl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgSW50MzJTaGFwZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXREb3Vi
bGVQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0Nv
bnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBEb3VibGVTaGFw
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1
bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENv
bnRpZ3VvdXNTaGFwZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBK
dW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIEJ5VmFsSW5mbyopOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
SnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9w
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2Rl
KE9wKTsKQEAgLTEwNjQsNiArMTAwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0
b3I8SklUR2V0QnlWYWxHZW5lcmF0b3I+IG1fZ2V0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiBtX2dldEJ5SWRzV2l0aFRoaXM7CiAgICAgICAgIFZl
Y3RvcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiBtX3B1dEJ5SWRzOworICAgICAgICBWZWN0b3I8SklU
UHV0QnlWYWxHZW5lcmF0b3I+IG1fcHV0QnlWYWxzOwogICAgICAgICBWZWN0b3I8SklUSW5CeUlk
R2VuZXJhdG9yPiBtX2luQnlJZHM7CiAgICAgICAgIFZlY3RvcjxKSVRJbkJ5VmFsR2VuZXJhdG9y
PiBtX2luQnlWYWxzOwogICAgICAgICBWZWN0b3I8SklURGVsQnlJZEdlbmVyYXRvcj4gbV9kZWxC
eUlkczsKQEAgLTEwOTEsNiArMTAzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNp
Z25lZCBtX2dldEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2dl
dEJ5SWRXaXRoVGhpc0luZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9wdXRC
eUlkSW5kZXggeyBVSU5UX01BWCB9OworICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5VmFsSW5kZXgg
eyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2luQnlJZEluZGV4IHsgVUlOVF9NQVgg
fTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAg
ICB1bnNpZ25lZCBtX2RlbEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRleCA2
OWJmMWExYzNmOGExYTM5MTY5YzZkMzk5YzJiMGM2NzZjODhjZjY0Li5hNGJiOGY4YmRkMDc2OGJh
YzkzOWE4MjdkNTZiNmI5YjJkNGNkNTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBA
IEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCiAgICAgRUNNQU1vZGUgZWNt
YU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVC
bG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNl
ZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQorICAgICAgICA6IEpJVEJ5SWRH
ZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0QnlJZCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQog
ICAgICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgICAgICwgbV9wdXRLaW5kKHB1dEtp
bmQpCiB7CkBAIC0zODEsNiArMzgxLDQzIEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmZp
bmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKICAgICAg
ICAgbV9zdHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uOwogfQogCitKSVRQdXRCeVZhbEdlbmVyYXRvcjo6SklUUHV0QnlWYWxHZW5lcmF0b3IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwg
R1BSUmVnIHN0dWJJbmZvR1BSKQorICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCisgICAgLCBt
X2Jhc2UoYmFzZSkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgbV9zdHViSW5mby0+aGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisKKyAgICBtX3N0dWJJbmZvLT5iYXNlR1BSID0g
YmFzZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+cmVncy5wcm9wZXJ0eUdQUiA9IHBy
b3BlcnR5LnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZUdQUiA9IHZhbHVlLnBh
eWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSID0gc3R1YkluZm9HUFI7
CisgICAgbV9zdHViSW5mby0+bV9hcnJheVByb2ZpbGVHUFIgPSBhcnJheVByb2ZpbGVHUFI7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBtX3N0dWJJbmZvLT5iYXNlVGFnR1BSID0gYmFzZS50
YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwor
ICAgIG1fc3R1YkluZm8tPnYucHJvcGVydHlUYWdHUFIgPSBwcm9wZXJ0eS50YWdHUFIoKTsKKyNl
bmRpZgorfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJiBqaXQpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgeworICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOworICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIH0gZWxzZQorICAgICAgICBtX3Nsb3dQYXRoSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisK
K3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRo
LCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKK3sKKyAgICBCYXNlOjpmaW5hbGl6ZShmYXN0UGF0aCwg
c2xvd1BhdGgsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3Rh
cnQpKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCisgICAgICAgIG1f
c3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
K30KKwogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIGJyYW5kLCBHUFJSZWcgc3R1YkluZm9HUFIpCiAgICAgOiBCYXNl
KGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlw
ZSwgdXNlZFJlZ2lzdGVycykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAppbmRleCBlZTY4MTQxMDFhODFlYmQxNTViZjRkYjY5
M2ZmNDdjOGEyNzhmN2ZiLi4zNWE3N2Y4ZTczOTZlNDYyN2VjZDZlMDhjNTA0MGNkMTRmZTQ1NzQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCkBAIC0xMjksOSArMTI5LDcgQEAgY2xhc3MgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogCiBjbGFzcyBKSVRQdXRC
eUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogcHVibGljOgot
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKQotICAgICAgICA6IG1fZWNtYU1vZGUoRUNNQU1vZGU6
OnN0cmljdCgpKQotICAgIHsgfQorICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBl
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKQEAgLTE0MiwxMCAr
MTQwLDM3IEBAIGNsYXNzIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJ
ZEdlbmVyYXRvciB7CiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9u
KCk7CiAKIHByaXZhdGU6Ci0gICAgRUNNQU1vZGUgbV9lY21hTW9kZTsKKyAgICBFQ01BTW9kZSBt
X2VjbWFNb2RlIHsgRUNNQU1vZGU6OnN0cmljdCgpIH07CiAgICAgUHV0S2luZCBtX3B1dEtpbmQ7
CiB9OwogCitjbGFzcyBKSVRQdXRCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvciB7CisgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOworcHVibGljOgorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCisg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoCisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eSwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJyYXlQcm9maWxlR1BSLCBHUFJSZWcg
c3R1YkluZm9HUFIpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3dQYXRoSnVtcC5tX2p1bXAuaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiBtX3Nsb3dQYXRoSnVtcC5tX2p1bXA7CisgICAgfQorCisgICAg
dm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXIm
IHNsb3dQYXRoTGlua0J1ZmZlcik7CisKKyAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKKworcHJpdmF0ZToKKyAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CisgICAgSlNW
YWx1ZVJlZ3MgbV92YWx1ZTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owor
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOworfTsKKwog
Y2xhc3MgSklURGVsQnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IgewogICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMTdjMjdmZGMx
Y2QzYmY2MzI2YTQzYjVmZWY4MWU2MGU2Y2M0N2YwMi4uNjdlMGI3ODMwOWE0M2YyYmJiOTlhOTFi
MzY4OWI5MjdiMjYyZGI2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
QEAgLTM1Miw2ICszNTIsMTQgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUKICAgICB9CiB9CiAK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRj
aEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNz
KGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSkpOworICAgIH0KK30KKwogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9I
b2xlKCkpOwpAQCAtMzYyLDI0ICszNzAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maQogICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mT3V0T2ZCb3Vu
ZHMoKSk7CiB9CiAKLWlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJy
YXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIGF1dG8gYXJyYXlQcm9maWxlU2F3ID0gW10gKEFy
cmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpIHsKLSAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhhcnJheU1vZGVzLCBj
YXBhYmlsaXR5KTsKLSAgICB9OwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCBtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmls
ZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhh
cnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVREb3VibGU7Ci0gICAg
aWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkKLSAgICAgICAgcmV0
dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgQXJyYXlT
dG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwotICAgIHJldHVy
biBKSVRDb250aWd1b3VzOwotfQotCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZDI0ZDlmNWVkZjg3MTU4MzhkNzc1YmVjYzcxZjgxOTI0
Y2I5M2M5Ny4uN2ZkMDQ2MzI4MWUzNWRmZTU1ZmFlMjA2MTAwYTE1ZGE5NzE5YTI5OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03MTksNyArNzE5
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywg
UHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJ
bmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc1MSw3ICs3NTEsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplYwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0
S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZv
LCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTc4Miw3ICs3ODIsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlk
ZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1
dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8s
IFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtODEzLDcgKzgxMyw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAo
c3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRl
bnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0
S2luZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywg
UHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQdXRQcml2YXRlRmllbGRDYWxsYmFjaz4KQEAgLTg4OCw3ICs4ODgsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplLCB2b2lkLAogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5
cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAog
ICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9s
ZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVy
LCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7
CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VP
YmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRC
eUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSk7CiAgICAgfSk7
CiB9CiAKQEAgLTkyNCwxNiArOTI0LDE1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKCiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAgICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBpZGVudGlm
aWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5m
bywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKKyAgICAgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBp
ZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0KTsKICAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgcHV0QnlW
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1v
ZGUgZWNtYU1vZGUpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFs
dWUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9
IHN1YnNjcmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gKmluZGV4OwogICAgICAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtOTQyLDcgKzk0MSw4IEBAIHN0YXRpYyB2b2lk
IHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVl
LCBKU1ZhbHVlIHN1CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAg
ICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxl
LT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAg
ICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxP
YmplY3QsIGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTk1MSwzMiArOTUxLDMwIEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1CiAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZ2xvYmFsT2Jq
ZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgIHJldHVybjsKLSAg
ICB9IAorICAgIH0KKwogICAgIGlmIChzdWJzY3JpcHQuaXNOdW1iZXIoKSkgewotICAgICAgICBi
eVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJv
dW5kcygpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRP
ZkJvdW5kcygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNj
cmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFu
IG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYm
ICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3Jp
cHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0gcHJvcGVydHkpKQotICAgICAgICBi
eVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAgICBzY29wZS5yZWxlYXNlKCk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsK
ICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBz
bG90KTsKIH0KIAotc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1Zh
bHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpCitzdGF0
aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEFycmF5
UHJvZmlsZSogYXJyYXlQcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heWJlSW5kZXggPSBz
dWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaW5kZXggPSAqbWF5YmVJbmRleDsK
IAogICAgICAgICBzd2l0Y2ggKGJhc2VPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CkBAIC05ODgs
NyArOTg2LDggQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAg
ICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0
T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwMDIsMTUg
KzEwMDEsMTEgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEoKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGlu
ZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VPYmpl
Y3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAs
IGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGly
ZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVh
YmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgp
ICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwot
CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmpl
Y3QsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0
V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwg
c2xvdCk7CkBAIC0xMDIzLDIyNiArMTAxOCwyMDYgQEAgZW51bSBjbGFzcyBPcHRpbWl6YXRpb25S
ZXN1bHQgewogICAgIEdpdmVVcCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5
UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1Zh
bHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0QnlWYWxPcHRpbWl6ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1v
ZGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Ci0KLSAgICAvLyBTZWUgaWYgaXQn
cyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7Ci0KICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzQ29weU9u
V3JpdGUoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5pbmRleGluZ01vZGUoKSkpCi0gICAgICAgIHJl
dHVybiBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLQotICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZh
bEluZm8tPnN0dWJSb3V0aW5lKTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9i
amVjdC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmco
c3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAg
ICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUo
c3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0KGFycmF5
TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBKSVQ6
OmNvbXBpbGVQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQg
PSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOworICAgICAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2Rl
KCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIGlmIChzdHVi
SW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9j
aywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVwYXRj
aEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3
ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24n
dCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCi0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1
bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgIH0KKyAgICAgICAgaWYgKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0
eUtleShnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwor
ICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUu
aXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIGlmIChiYXNl
VmFsdWUuaXNPYmplY3QoKSAmJiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50
aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7Ci0g
ICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0g
Qnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAg
ICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5
VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6Ok5v
dERpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVy
aWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21D
ZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2Ny
aXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENv
bW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7
CisgICAgICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0SW5saW5lKGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2Ny
aXB0LmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2Fj
aGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAg
ICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeVZh
bCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9
IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAhPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ugc2xv
dyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJl
IHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2FzZXMg
d2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0cywg
dGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0byBv
YnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGlj
LiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJlc3Vs
dCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAx
MCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6
R2l2ZVVwOwotICAgIH0KLQotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgZWNtYU1vZGUpKTsKIH0KIAotSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUp
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9n
dWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9
IHRyeVB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwot
ICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAg
Ly8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Ns
b3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAg
ICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uUHV0QnlW
YWxHZW5lcmljKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZh
bChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBl
Y21hTW9kZSkpOworCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHBy
b2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1
bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBv
YmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9w
ZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAot
ICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXph
dGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9w
dGltaXplZDsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJv
ZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBkaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxl
KiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09i
amVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7
Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dERpcmVjdChhcnJheU1vZGUpICYmIGFycmF5
TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgeworICAgIGlmICghaXNDb3B5T25Xcml0ZShi
YXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7Cisg
ICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nR2VuZXJpYyh2bSwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICBpZiAocHJvZmlsZSkgewogICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBKSVQ6
OmNvbXBpbGVEaXJlY3RQdXRCeVZhbChsb2NrZXIsIHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywg
cmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKKyAgICAgICAgICAgICAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVj
dHVyZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXBhdGNoQXJyYXlQdXRCeVZhbChn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsICpzdHViSW5mbywg
UHV0S2luZDo6RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAg
Ly8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50
ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMu
Ci0gICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpP
cHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKLSAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwot
ICAgIH0gZWxzZSBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVy
Q2VsbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVh
YmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2
ZVVwKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRl
Y29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxE
aXJlY3Q+KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6
RGlyZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1p
emF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJp
YyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBieVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNl
bGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJzY3Jp
cHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwor
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0
cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOworCisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZv
cmVQdXQodm0sIGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1dERp
cmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KTsKKworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKKworICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwoc3Vic2NyaXB0LmFzQ2VsbCgpKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAq
c3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0
ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9wdGltaXphdGlvblJlc3VsdCAh
PSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlKSB7Ci0gICAgICAgIC8vIElmIHdlIHRha2Ug
c2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBz
dXJlIHdlCi0gICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2Fz
ZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKLSAgICAgICAgLy8gb2JqZWN0
cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0
byBvYnNlcnZlCi0gICAgICAgIC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3Jw
aGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKLSAgICAgICAgLy8gdGhlIHJl
c3VsdCBpcyBHaXZlVXAuCi0gICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+
PSAxMCkKLSAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6R2l2ZVVwOwotICAgIH0KKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmls
ZSwgZWNtYU1vZGUpKTsKIAotICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7CiB9CiAKLUpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUp
KQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
QXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0ID0gdHJ5
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2Nr
LCBvYmplY3QsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRV
Uk5fQUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAgICAv
LyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAg
ICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxHZW5lcmljOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbEdlbmVyaWMpOwotICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHN1YnNjcmlwdCwgdmFs
dWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKyAgICBkaXJlY3RQdXRCeVZhbE9wdGltaXplKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5
UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBK
SVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9
CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVy
aWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQ
cm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
IAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJp
Yywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFN
b2RlKSkKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBF
Q01BTW9kZTo6c3RyaWN0KCkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Ns
b3dQYXRoID0gdHJ1ZTsKKworICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBz
dWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVl
KTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwotICAgIGRpcmVjdFB1
dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1
ZSwgYnlWYWxJbmZvLCBlY21hTW9kZSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZh
bHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30K
KworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKwor
ICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgZGlyZWN0UHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9m
aWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCcmFuZCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDI1ODRlOTk1ZTQ2NmRlOTRh
OWIyMDMyN2IwZWM0ODgxZDVmMTk5OTguLmVmYmQ4ODczNTQyZmMzZjRiZTgzZTA2YmUwNjI1N2Jm
YzI5Y2M0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBA
IC0yMDMsMTAgKzIwMywxNSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZQogCiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEJ5VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVHZW5lcmljLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5m
byosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7
Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZh
bEluZm8qLCBFQ01BTW9kZSkpOworCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOwogCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgRUNNQU1vZGUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSosIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCAzZDFkODRmYzgyMDJiZjg4OWJkZjIwZWEz
MzhkZjhhOTExMDkwNjNiLi4zN2M2YzU5ZjJkMDZkMzhlNjYyMTdkNjA1NjAzOTFiYjYzOGY3NmJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cApAQCAtNDM4LDE3OCArNDM4LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OworICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwogICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29k
ZUluZGV4KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudElu
dChwcm9wZXJ0eSk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQotICAg
ICAgICBtb3ZlKEltbTMyKGdldE9wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7
Ci0gICAgZWxzZQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocHJvZmlsZSksIHJlZ1QzKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleDsKLSAgICBpZiAoIXByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNz
KCZieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1QxKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBT
ZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgotICAgICAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQo
cmVnVDEsIHJlZ1QxKTsKLSAgICB9Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOwogCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQg
ZG8gdGhpcyBpbmxpbmU/Ci0gICAgbG9hZDgoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJy
YXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2Rl
KSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsK
KyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
ZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
KQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZi
eVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0g
ICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5n
U2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRl
eGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQz
MihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsK
LSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7
Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0
b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwot
ICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3Jl
VG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICBy
ZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExp
c3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkp
OwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRU
eXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29y
cmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlT
dG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7
Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQot
ICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdy
aXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0g
ICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNl
czsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjYyLDEyICs1MTgsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0
byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYg
KGlzRGlyZWN0KQpAQCAtNjc1LDQ4ICs1MzQsNDAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5k
IG5vdCBjbG9iYmVyZWQuCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgLy8gVGhl
eSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgorICAg
IC8vIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIC8vIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gcmVnVDI7CisgICAgLy8gY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLQotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFy
Z3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50
R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1Owot
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFs
SW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFs
dWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3Bl
cmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNzMxLDI0ICs1ODIsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIwOwotICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQ
UiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFy
Z3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCisgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRH
UFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwog
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAot
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
KT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJ
bmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGpp
dC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1
bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25Q
dHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsKIApAQCAtODEwLDEzICs2NjAsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFy
Z3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihi
eVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQu
dmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUyLDE0ICs3MDIsMTQgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1
bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxP
YmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBw
dXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkxLDgyICsz
MTQxLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNl
bGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3Jp
dGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2Ug
SklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIp
OwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJh
eVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUp
KQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRl
Y29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJy
YXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5
cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8t
PnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJ
bmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbElu
Zm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAg
ICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4
ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3Qo
KS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29s
IGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2Vs
aW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAg
ICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3Zh
bF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZv
LT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFn
PihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVz
cykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQot
fQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xh
dGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdv
IGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBs
YXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJ
VEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDgsMjIzICszMTgy
LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2lu
ZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NF
UlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpv
cGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFs
V2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywg
c2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ss
IExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2Vw
dGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9u
Q2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBh
dXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxs
ZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRl
LmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNh
bGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdl
bi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBw
dXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3Qi
IDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlW
YWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25v
dEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJ
bmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZv
LT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBm
cm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28g
d2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4K
LXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9w
UHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJs
ZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxX
aXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFy
cmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSBy
ZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVy
SUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJl
Z1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklE
IHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsK
LSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
LSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAg
YXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3Rl
ZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVt
cChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlw
ZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
MzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5
VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5
UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsK
LSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2Vu
ZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBp
biBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0
aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwg
bGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFt
cGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAg
ICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhm
ZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNj
cmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwg
ZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOwotICAgICAgICB0
b29CaWcubGluayh0aGlzKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5
U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQubGluayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkg
ewotICAgIGNhc2UgMToKLSAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxh
dGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNo
LCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAg
ICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0
eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENS
QVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAg
ICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3Rl
cklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdU
MzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBs
YXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7
Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlT
Y3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAg
IFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8p
IHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJs
eVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAg
ICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1
bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RU
eXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0
eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAg
ICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIp
OwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwot
ICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMy
KGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBm
cFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0
aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRj
aCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1v
dmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlz
KTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gp
OwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwot
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVt
cCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxh
dGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAg
Ci0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlf
dmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0
byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlv
bmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0
Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJl
Z1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0
ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4
IGU4MjY5ZmQxZTE5OWYxNTI0ODRlYjQ0ZGRlZjJhYWQxNzc4MjMyZmEuLmY1Yjg0MTg5ODY4MzU4
NTNhOWQ0NmFjYWZlMDJhZWJhNjUxNTliODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDY2LDE1MSArNDY2LDI4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29k
ZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0
eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwot
ICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QxKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdl
IHNob3VsZCBkbyB0aGlzIGlubGluZT8KLSAgICBsb2FkOChBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsK
LSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0gICAg
Ci0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAg
c3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91
YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgRUNNQU1vZGUg
ZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgIFB1dEtpbmQgcHV0S2luZCA9IHN0
ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsPiA/IFB1dEtpbmQ6Ok5vdERpcmVjdCA6IFB1dEtp
bmQ6OkRpcmVjdDsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgVU5VU0VEX1BB
UkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFwZSkpOwotICAgIAotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwot
ICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRy
ZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAKLSAg
ICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNo
YXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAg
IHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
KTsKLSAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QzKTsKLSAgICAgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNo
SWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBm
cFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50Lmxp
bmsodGhpcyk7Ci0gICAgICAgIG1vdmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1QxLCBmcFJlZ1Qw
KTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAg
ICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJ
bmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAgICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIG91dE9mQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7
Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmls
ZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDEpOwotICAg
IHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0
TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHJlZ1Q2KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEp
OworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDYsIHJlZ1Q3
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlW
YWxJbmZvKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVn
VDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52
YWxpZEdQUlJlZyk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0gICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBwYXlsb2Fk
Ci0gICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7IC8vIHRhZwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAg
IGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lh
bENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwot
ICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFk
ZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBqdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBlbmQubGluayh0aGlzKTsKLSAg
ICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8g
RklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2
ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC02MjAsMTIgKzQ5NywxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOwor
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAg
ICAgaWYgKGlzRGlyZWN0KQpAQCAtNjMzLDIxICs1MTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAgIAorICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107
CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFi
ZWwoKTsKLSAgICAKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCiAgICAg
Ly8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lz
dGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVuIG9u
IG90aGVyIHBsYXRmb3Jtcy4KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwotICAg
IGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2FkMihiYXNlLCBy
ZWdUMiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQp
LCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7CiAKLSAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdl
dCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4Kys7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUp
OworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXgg
MzdhODBiMjk1NzcyMTBmMzVlMDZkODFiYTEzNDVmNjk3ODAwOTY0NC4uNGI3MWEwZmE5ZmQ5OTAz
MTNjYTRhYjc5ZDE5NDNmOGM4MWQ3ZjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCkBAIC01NjgsNTMgKzU2OCw5NCBAQCB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKUwogICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyk7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkg
LT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCitzdGF0aWMgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAg
ICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3
aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9
CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0
dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRCeUtp
bmQsIHB1dEtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODE3LDEyICs4NTgsMTIg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgCiAg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6
IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAog
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIApAQCAtODM1LDEy
ICs4NzYsMTA2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
LXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2
b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1
dEtpbmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7Cisg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFw
KTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAg
ICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoaXNUeXBl
ZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAg
ICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBl
ZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OENsYW1wZWRTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmln
VWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0Ogor
ICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGlu
Z1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGlu
Z1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNo
YXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShs
b2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxw
dHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRy
KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9
CisKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFN
b2RlKQoreworICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7CiB9CiAKIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNs
b3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVs
QnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKQEAgLTk4Niw3ICsxMTIxLDcgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlk
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkluQnlJZE9wdGltaXplKTsKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdElu
QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcHJvcGVydHlOYW1lKTsKQEAgLTE3NTYsMjggKzE4OTEsNTUgQEAgdm9pZCByZXNldEdldEJ5
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5
S2luZCBraW4KICAgICB9CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtp
bmQpCiB7Ci0gICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdl
dChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBGdW5jdGlv
blR5cGUgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rp
b247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAg
ICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQo
Y29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9
IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVu
Y3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9u
VHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQor
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0KIAog
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVu
Y3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHV0QnlLaW5kOjpC
eVZhbDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAg
ICB9CiB9CiAKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmgKaW5kZXggYzE5ZjAyZDRkNDAxOTU4MWU1YTk0YWJkNjM3M2MwYWMzNjI5ZDhlNi4u
ZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgKQEAgLTQzLDYgKzQzLDExIEBAIGVudW0gY2xhc3MgR2V0QnlLaW5k
IHsKICAgICBQcml2YXRlTmFtZUJ5SWQsCiB9OwogCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7Cisg
ICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKIGVudW0gY2xhc3MgRGVsQnlLaW5kIHsKICAgICBC
eUlkLAogICAgIEJ5VmFsCkBAIC01Niw3ICs2MSw4IEBAIGVudW0gY2xhc3MgSW5CeUtpbmQgewog
CiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBy
ZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEFy
cmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9p
ZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1
Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hEZWxldGVC
eShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFs
dWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
RGVsQnlLaW5kLCBFQ01BTW9kZSk7CiB2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5k
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZv
aWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
T2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0
dWJJbmZvJik7CkBAIC02OSw3ICs3NSw3IEBAIHZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwg
Q2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKIHZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7CiB2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKIHZvaWQgcmVzZXRIYXNQcml2YXRlQnJh
bmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCmluZGV4IDdlZWE3NTg3MGU3YjE1
Mjk2OTEwZDVlMGE4NzE1NWFjNWM0MmRkM2IuLjcyZTdiMDc5MTRlZWQ3ZjY3Nzc5OTAxZmJiYTMw
NmJjNDcxMmM1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8v
IFRoZSBmb2xsb3dpbmcgaXMgYSBzZXQgb2YgYWxpYXMgZm9yIHRoZSBvcGNvZGUgbmFtZXMuIFRo
aXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0
dXMuY3BwIGFuZCBQdXRCeUlkU3RhdHVzLmNwcCkKKy8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAo
ZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAgYW5kIFB1dEJ5U3RhdHVzLmNwcCkKIC8vIHdoaWNoIHJl
ZmVycyB0byB0aGUgb3Bjb2RlcyBleHBlY3RpbmcgdGhlbSB0byBiZSBwcmVmaXhlZCB3aXRoICJs
bGludF8iLgogLy8gSW4gdGhlIENMb29wIGltcGxlbWVudGF0aW9uLCB0aGUgMiBhcmUgZXF1aXZh
bGVudC4gSGVuY2UsIHdlIHNldCB1cCB0aGlzCiAvLyBhbGlhcyBoZXJlLgo=
</data>
<flag name="commit-queue"
          id="459341"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436338</attachid>
            <date>2021-08-24 15:13:39 -0700</date>
            <delta_ts>2021-08-24 15:28:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210824151338.patch</filename>
            <type>text/plain</type>
            <size>331374</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi4wYjQ2YjIzMjY4YmRhOTRm
YjJjNGQ5MjQ1Nzk4YWI1Y2ZkMTBmOWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDAgQEAKKzIwMjEtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFw
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1
dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQ
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4
aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1
cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpT
Q19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXpl
KToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6
OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQ
dXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlND
OjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisK
IDIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwgc2hvdWxkIG5vdCBsb2FkIGlu
ZGV4aW5nVHlwZSB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZhN2EuLjMyM2Q4YTQwZTFmNmUy
M2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2Jq
ZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlFMTRDQTdE
QzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NjE0Q0E3REMxMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUEx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyog
UHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkE1MTRDQTdEREQw
MDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkz
QjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlz
aXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQkQxQjQ4N0E3NzAw
QzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJl
ZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzMDM2MUQ0MTkyQzMw
MDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDExIEBACiAJCTBGOTMzMjk0MTRD
QTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0QnlTdGF0dXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJ
ZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
dXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE4
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZh
cmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlWYXJpYW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAv
KiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVuY2VzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2OTUsMTAgQEAKIAkJCQkwRkQz
RTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLywKIAkJCQkwRjE1
Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCAqLywKIAkJCQkwRjE1Q0Qy
MTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8sCi0JCQkJMEY5MzMyOTkxNENB
N0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJMEY5M0I0QTcxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAv
KiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZh
cmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICov
LAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmNwcCAq
LywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5oICov
LApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJFMUM4RTNFQzgwMDhDMDg1QSAv
KiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3
MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTMzMkE0MTRDQTdE
RDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzQjRB
QTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQ
cm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cmlu
ZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTljMzAyMGQuLjcwNzdlZjlhZTMx
MTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmNwcAogYnl0
ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNl
LmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
CitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNw
cAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFu
ZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMzNWI2Li4yY2Nk
MzU2MzgzMDQ5ZDc4ZmMyNjliZjA1NWIyYzIxMTZlNDdjYmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwxOSBAQCBSZWY8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpndWFy
ZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1MiwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNvbnN0CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3LDE5IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25zdAogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3NywyNCBAQCBib29s
IEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNh
c2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpmb3JF
YWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAgICB9CiB9CkBA
IC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZNJiB2bSwgVmVj
dG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
Q29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgpID09IHR5cGUo
KTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtOTYxLDYgKzEwNjUsOCBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0
dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hH
UFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsxMTY2LDggQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC0x
MTQ1LDYgKzEyNTMsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlm
IChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTExOTksMTUgKzEzMDksMTQgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlz
RW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9h
cnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTIyNywxNiArMTMz
NiwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAg
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAg
ICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoR1BS
KSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3Jh
dGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNo
M0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVt
cHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNo
R1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzcxLDIx
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAg
ICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGppdC56
ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgICAg
IGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICAg
ICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0
Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJsZShz
dGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5
ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vs
c2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1w
dHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQUigp
KTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM5NSwyNzMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
IAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5
KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVk
U3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBl
bmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNl
IG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5w
cm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3JwaGlj
IGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldyaXRl
KSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAo
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKKyAgICAgICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90
eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAg
ICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQo
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVy
dHlHUFIsIHNjcmF0Y2gyR1BSKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBp
c091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6WmVybywg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpKTsKKyNlbHNl
CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIEpTVmFsdWU6Om9mZnNldE9mVGFnKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworI2VuZGlmCisKKyAgICAgICAgICAgIHN0b3JlUmVz
dWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3Ms
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAg
ICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihleHBlY3RlZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lz
dGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgc3Rv
cmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAg
ICAgICAgICAgYXV0byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOwor
ICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0g
aml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7
CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0
YXRlLnNjcmF0Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIo
KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICByZWFkeS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJv
cGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAg
ICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1p
dHRlZCBpbiB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwg
cHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYg
KG1fdHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKICAgICAgICAgICAgIGlzT3V0
T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwor
ICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQu
c3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAg
IGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZN
YXlTdG9yZVRvSG9sZSgpKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHko
KSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7CiAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVu
ZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMg
Y29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhl
IGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorCisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0
b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9y
VHlwZWRBcnJheVR5cGUodHlwZSkpKSk7CisKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIo
dmFsdWVSZWdzKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQo
dHlwZSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJ
bnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgIGF1dG8gZG91YmxlQ2FzZSA9IGppdC5icmFuY2hJ
Zk5vdEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3Vi
bGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAg
ICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UubGluaygm
aml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsK
KyAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9E
b3VibGUoc2NyYXRjaEdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisjZWxzZQorICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyNlbmRpZgorICAgICAgICAgICAgcmVhZHkubGluaygmaml0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIC8vIE91dE9m
Qm91bmRzIGJpdCBvZiBBcnJheVByb2ZpbGUgd2lsbCBiZSBzZXQgaW4gdGhlIG9wZXJhdGlvbiBm
dW5jdGlvbi4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsK
KworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVz
ZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygp
KTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNo
R1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKQorICAgICAgICAgICAgc2NyYXRjaDNHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygKKyAgICAgICAgICAgIGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisKKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBqaXQuY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgZmFsc2UpOworCisgICAgICAgIGppdC5zaWduRXh0ZW5k
MzJUb1B0cihwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChpc0ludCh0eXBl
KSkgeworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IUpTQzo6aXNTaWduZWQodHlwZSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91
bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGF1
dG8gdG9vQmlnID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW4sIHNjcmF0
Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAg
ICAgaml0LnhvcjMyKHNjcmF0Y2gzR1BSLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAg
YXV0byBjbGFtcGVkID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB0b29CaWcubGluaygm
aml0KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigweGZmKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGNsYW1wZWQubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICBpbkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTgoc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gy
R1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc1R3bykpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRm91cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAg
ICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9h
dChzdGF0ZS5zY3JhdGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVGbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHBy
ZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xMzIyLDYgKzE2ODgsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3Mo
KSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
CiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTg5
NCw4ICsyMjYyLDEyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwor
ICAgICAgICBpZiAoc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpCisgICAgICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7CkBA
IC0yMDU4LDYgKzI0MzAsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsK
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2lu
ZDo6UHJvcGVydHlEZWxldGlvbik7CkBAIC0yMTgzLDYgKzI1NTcsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKICAgICBjYXNlIENoZWNrUHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGln
dW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlOgogICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJh
dGVXaXRoR3VhcmQoKSwgc2luY2UgdGhlIGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8v
IGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRl
KCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNpbmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFy
ZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3MuCkBAIC0yMTk2LDIyICsyNTgzLDMxIEBAIFR5cGVkQXJy
YXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlwZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAg
ICByZXR1cm4gVHlwZUludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVVaW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlSW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQx
NjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjg0LDYgKzI2ODAsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJlZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFj
Y2Vzc0Nhc2UmIHJocykKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAppbmRleCA0MTljOTljOTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJl
Li41NjNhMTU1MmFlNDIxNjQ0MDQ2ZDBhYTQxZDIzYjZhZGQ1ZGI2NTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAg
Y2xhc3MgQWNjZXNzQ2FzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNl
PiB7CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xv
YWQsCisgICAgICAgIEluZGV4ZWRJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRDb250aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAg
ICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
LAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVp
bnQ4X3QgewpAQCAtMzUzLDEyICszNjYsMTMgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAg
ICAgICAgIHN0cnVjdCBLZXkgewogICAgICAgICAgICAgS2V5KCkgPSBkZWZhdWx0OwogCi0gICAg
ICAgICAgICBLZXkoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJh
R1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIFBvbHlt
b3JwaGljQWNjZXNzSklUU3R1YlJvdXRpbmUqIHdyYXBwZWQpCisgICAgICAgICAgICBLZXkoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJhR1BSLCBHUFJSZWcgc3R1
YkluZm9HUFIsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMsIFBvbHltb3JwaGljQWNjZXNzSklUU3R1YlJvdXRpbmUqIHdyYXBwZWQpCiAgICAgICAgICAg
ICAgICAgOiBtX3dyYXBwZWQod3JhcHBlZCkKICAgICAgICAgICAgICAgICAsIG1fYmFzZUdQUihi
YXNlR1BSKQogICAgICAgICAgICAgICAgICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKICAgICAgICAg
ICAgICAgICAsIG1fZXh0cmFHUFIoZXh0cmFHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3N0dWJJ
bmZvR1BSKHN0dWJJbmZvR1BSKQorICAgICAgICAgICAgICAgICwgbV9hcnJheVByb2ZpbGVHUFIo
YXJyYXlQcm9maWxlR1BSKQogICAgICAgICAgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRS
ZWdpc3RlcnMpCiAgICAgICAgICAgICB7IH0KIApAQCAtMzc1LDYgKzM4OSw3IEBAIGNsYXNzIFNo
YXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0g
Yi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1f
ZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9z
dHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAgICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09
IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdp
c3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICB9CiAKQEAgLTM4Myw2ICsz
OTgsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgIEdQUlJlZyBtX3Zh
bHVlR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1fZXh0cmFHUFI7CiAgICAgICAgICAgICBHUFJS
ZWcgbV9zdHViSW5mb0dQUjsKKyAgICAgICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsK
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgfTsKIApA
QCAtNDE2LDYgKzQzMiw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAg
ICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0gYi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAg
ICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1fZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAg
JiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9zdHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAg
ICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAg
ICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdpc3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnMpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBvcmRlcmluZyBvZiBjYXNlcyBkb2Vz
IG5vdCBtYXR0ZXIgZm9yIHNoYXJpbmcgY2FwYWJpbGl0aWVzLgogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4gcG90ZW50aWFsbHkgaW5jcmVhc2Ugc3VjY2VzcyByYXRlIGJ5IG1ha2luZyB0
aGlzIGNvbXBhcmlzb24gLyBoYXNoaW5nIG5vbiBvcmRlcmluZyBzZW5zaXRpdmUuCkBAIC00NDUs
NiArNDYyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgIEdQUlJlZyBtX3Zh
bHVlR1BSOwogICAgICAgICBHUFJSZWcgbV9leHRyYUdQUjsKICAgICAgICAgR1BSUmVnIG1fc3R1
YkluZm9HUFI7CisgICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsKICAgICAgICAgUmVn
aXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxSZWZQ
dHI8QWNjZXNzQ2FzZT4+JiBtX2Nhc2VzOwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxTdHJ1
Y3R1cmVJRD4mIG1fd2Vha1N0cnVjdHVyZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgKaW5kZXggNmRjN2IwZTU0NDdmZTA2MGRiY2JkMjRkOTkwOTc1
NjU3OWZjNjU3NC4uOTFkYThmM2VmZjkyZmMzYTg5NTcwZDc1YTRiOTEzYmQyNjMyY2M0YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaApAQCAtMjA4
LDYgKzIwOCw5IEBAIGNsYXNzIEFycmF5UHJvZmlsZSB7CiAgICAgQXJyYXlNb2RlcyogYWRkcmVz
c09mQXJyYXlNb2RlcygpIHsgcmV0dXJuICZtX29ic2VydmVkQXJyYXlNb2RlczsgfQogICAgIGJv
b2wqIGFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gJm1fbWF5U3RvcmVUb0hvbGU7
IH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXlTdG9yZVRvSG9sZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbWF5U3RvcmVUb0hvbGUpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlQcm9maWxlLCBtX2xhc3RTZWVuU3RydWN0dXJlSUQpOyB9
CisKICAgICB2b2lkIHNldE91dE9mQm91bmRzKCkgeyBtX291dE9mQm91bmRzID0gdHJ1ZTsgfQog
ICAgIGJvb2wqIGFkZHJlc3NPZk91dE9mQm91bmRzKCkgeyByZXR1cm4gJm1fb3V0T2ZCb3VuZHM7
IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAppbmRleCA3NjcxZDg3YjFlYTc0OWRjMzQ1NmY3NzY1
YWMwNmM0YThiY2ZiMmIxLi5jMDI1YTdiZjY1MTk0YmRhNGU4MjE1MWQ5Y2IzZjI5Njc4ZGE5Mjc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0xNDEsNiArMTQxLDggQEAgdm9pZCBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3Rh
dGUsIGNvbnMKICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwogICAgIGlmIChzdHViSW5m
by5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5t
X2FycmF5UHJvZmlsZUdQUik7CiAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAKICAg
ICBHUFJSZWcgcGFyYW1CYXNlR1BSID0gSW52YWxpZEdQUlJlZzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdhZDBkZjg4MjEx
MDdmZTNiODQ5MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcyYjRkYzJhMWQx
ODkyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVz
TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBHZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQdXRCeUlkU3Rh
dHVzOworY2xhc3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsKIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3Ry
dWN0IElDU3RhdHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7IG51bGxwdHIg
fTsKICAgICBHZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEluQnlTdGF0
dXMqIGluU3RhdHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dFN0YXR1cyB7
IG51bGxwdHIgfTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAg
IERlbGV0ZUJ5U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCmluZGV4IDQ4NDEw
MTM5ZGMyZjhjMGQ1YzgwYTJmZjkwNWMzYWE2YTEzNWRmYjIuLmMxZWIyZDY5ZDI3NTRlMDUxYTgy
NTlmNjM3N2U2NDcxNGVlYWVlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCkBAIC0yMTYsOCArMjE2LDEyIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIEdQUlJlZyBnZXRTY3JhdGNoUmVnaXN0ZXIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VUYWdHUFIpOwogICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLnZhbHVlVGFnR1BSKTsKICNlbmRpZgorICAgIGlmIChzdHViSW5m
by5wcm9wZXJ0eVJlZ3MoKSkKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVy
dHlSZWdzKCkpOwogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAg
IGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgR1BSUmVn
IHNjcmF0Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgaWYgKGFsbG9j
YXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMzYWRkMWZmZTY2Mjc1ZDkxMTQuLjQw
ZDZhMWY5ZGE1ODI1MjA1NTRhYWMzNGVjMWE0NGU0MjlhZjg2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtNDk0
LDYgKzQ5NCw4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJl
Z2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9jCiAjZW5kaWYKICAgICBpZiAoc3R1
YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVBy
b2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIpOwogCiAgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtODEwLDYgKzgxMiw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpTTG9jCiAgICAgICAgICAgICBzdHViSW5mby52YWx1ZUdQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwKICAgICAgICAgICAgIHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsCisgICAgICAgICAgICBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBrZXlzLAogICAgICAgICAgICAg
d2Vha1N0cnVjdHVyZXMsCkBAIC04NDYsNyArODQ5LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2MKIAogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CiAgICAgICAgIGlmIChjYW5C
ZVNoYXJlZCkKLSAgICAgICAgICAgIHZtLm1fc2hhcmVkSklUU3R1YnMtPmFkZChTaGFyZWRKSVRT
dHViU2V0OjpIYXNoOjpLZXkoc3R1YkluZm8uYmFzZUdQUiwgc3R1YkluZm8udmFsdWVHUFIsIHN0
dWJJbmZvLnJlZ3MudGhpc0dQUiwgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwgc3R1YkluZm8udXNl
ZFJlZ2lzdGVycywgc3R1Yi5nZXQoKSkpOworICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRTdHVi
cy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBzdHVi
SW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgc3R1YkluZm8udXNlZFJlZ2lzdGVycywg
c3R1Yi5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBmaW5pc2hDb2RlR2VuZXJhdGlvbihX
VEZNb3ZlKHN0dWIpKTsKQEAgLTEwMjIsNiArMTAyNSw0NSBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5k
ZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAg
ICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQzOWM3YTRlYTZlNjFjZjU2NDhhZWZh
YzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKLSNpbmNsdWRlICJD
b2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCi0jaW5jbHVkZSAiR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewotICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7Ci0gICAgCi0g
ICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2UgYXJlIG5vdCB5ZXQgdXNpbmcgYGNv
bXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1dF9wcml2YXRlX25hbWVgLgotICAg
IC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1
cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlz
IG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcFB1dFBy
aXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmls
ZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xk
U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwotCi0gICAgU3Ry
dWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwotICAg
IGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgIAot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShieXRl
Y29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAg
ICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBz
dHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci19Ci0KLSNpZiBFTkFC
TEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlu
a1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgIAotICAgIFVOVVNF
RF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGRp
ZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAg
IAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21w
dXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8s
IHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVOQUJMRShKSVQpCi0gICAgVU5VU0VE
X1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOwotICAgIFVOVVNFRF9QQVJB
TShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBy
ZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ss
IHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Ci19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgIGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgU3R1
YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxl
ZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkp
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1hcnkpOwotICAgIAotICAgIHN3aXRj
aCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0Ogot
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWls
ZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5
SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAg
ICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7Ci0gICAgICAgIAotICAg
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1w
bGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3Qt
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAg
ICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRp
b246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwot
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQg
PSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21w
bGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxl
eEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAq
Y2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNh
bGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRl
cigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5v
ZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgICAgICB9IH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6Ci0gICAgICAg
ICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgIH0KLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4
dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17
Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
ID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0
ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUo
YmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAgICBmb3IgKElDU3RhdHVzQ29udGV4
dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBj
b250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIGJsZXNzID0g
WyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5SWRTdGF0dXMgewotICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKLSAgICAgICAg
ICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKLSAgICAg
ICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgs
IHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQotICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7Ci0gICAgICAg
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0g
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBz
dGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJs
ZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMucHV0
U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVN
YXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci19Ci0K
LVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRL
aW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChzZXQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9zdGF0ZSA9
IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2
YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5l
IG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEg
cHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCi0gICAgICAgICAg
ICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgotICAgICAgICAgICAgaWYgKHByaXZh
dGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBpZiAoYXR0
cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBs
YWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBj
cmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgotICAgICAg
ICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhl
Y3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAgICAgICAgICAgICAgICAvLyBnb2lu
ZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBm
cm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZl
biBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5n
eS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRh
a2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2
YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1
cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4g
aGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0Ci0g
ICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1
c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBp
bnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCi0gICAgICAgIC8vIHNsb3cg
cGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgotICAgICAg
ICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMg
aXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRo
aXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkg
Y2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24g
ZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAg
IC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3Qg
YW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAgICAgIC8vIHdlIGRvbid0IHdhbnQg
dG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKLSAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJl
bnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7
Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIH0KLSAgICAK
LSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0
dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZz
ZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlh
bnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7Ci0gICAg
ICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjptYWtlc0Nh
bGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNT
bG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXpl
KFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkU3Rh
dHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhlcikKLXsKLSAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhpcyA9IFB1dEJ5SWRTdGF0dXMoKG1h
a2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBO
b0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsK
LSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgIGNh
c2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgIH0KLSAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0
dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKLXsKLSAgICBpZiAobV9zdGF0ZSAh
PSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1f
dmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0YXRlID0gTm9J
bmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0
aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBvdXQucHJpbnQoIigiLCBs
aXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgp
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIG91dC5w
cmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2OWFjNTcxM2RjOGU4ZjhiNjQ0MDAw
Y2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0
dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCi0j
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3Mg
U3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29k
ZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0
dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVu
dW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3Jt
YXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFz
IGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICAv
LyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICBUYWtlc1Nsb3dQ
YXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxz
LgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKCkK
LSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQotICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8
IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOwotICAg
IH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1t
YXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7Ci0gICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5m
b3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1t
YXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAg
ICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLSAg
ICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAgICAgIG1fdmFyaWFudHMuYXBwZW5k
KHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2
YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0
dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQotICAgIGJvb2wgdGFrZXNTbG93
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRl
ID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICBQdXRC
eUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IG51bVZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJp
dmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAotICAgICAgICBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRpZgotICAgIHN0YXRpYyBQdXRCeUlk
U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1
dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgIAotICAgIFN0YXRl
IG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1
NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFmMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLQotI2luY2x1ZGUgIkNh
bGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFu
dCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsK
LX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0
QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKLSAgICBt
X29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwotICAgIG1fbmV3U3RydWN0dXJl
ID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2Nv
bmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwotICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1
ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5
SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKLSAgICByZXN1
bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwotICAgIHJl
c3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9uZXdTdHJ1
Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQotewotICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOwotICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5t
X2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVw
bGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXpl
KCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICBt
X2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Ci19Ci0K
LWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAotewotICAgIHN3
aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgIGNhc2UgU2V0dGVyOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGNhc2UgU2V0
dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKLX0KLQotYm9vbCBQdXRCeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAg
IGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAg
ICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShv
dGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwotICAgICAgICAgICAgaWYgKG5ld1Zh
cmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7Ci0gICAg
ICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6Ci0gICAg
ICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIp
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAg
aWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0dXJlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbmV3U3Ry
dWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRp
dGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0
ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgIGlm
IChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0
YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIu
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9u
U2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5t
X2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1Zh
bGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbmRp
dGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVy
Z2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0K
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpCi17Ci0gICAgQVNTRVJUKG1f
a2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFj
ZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwotICAgIEFTU0VS
VCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAgIEFTU0VSVCghcmVwbGFjZS5yZWFs
bG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNF
bXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdo
ZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gK
LSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3
YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Ci0gICAgLy8gd29yayBpZiB3
ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBw
b2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1fb2xkU3RydWN0dXJl
Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
bV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1w
bGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1i
b29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgaWYgKCFtX29sZFN0
cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZl
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYm
ICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0K
LQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAg
IGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgIG91dC5wcmludCgKLSAg
ICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
Iiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQs
IGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQp
LCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCks
ICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Ci0gICAg
ICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICBv
dXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVlNWYwYTFkZTQwOGE1ZmJiZDFjYjdh
YjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua1N0YXR1czsK
LQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5vdFNldCwKLSAgICAgICAgUmVwbGFj
ZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0dGVyCi0gICAgfTsKLSAgICAKLSAg
ICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5kKE5vdFNldCkKLSAgICAgICAgLCBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFy
aWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlh
bnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVy
ZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
dHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlh
bnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0
JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0
aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3Ry
dWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5l
Y2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7Ci0gICAgYm9v
bCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25z
dDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlm
IHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgSW50
cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9Ci0KLSAgICAv
LyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgYm9vbCBpc1Byb3Bl
cnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBDYWxsTGlua1N0YXR1cyogY2FsbExp
bmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIp
OwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsKLSAgICB9Ci0KLSAgICBi
b29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhl
ci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2Up
OwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owot
ICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3Ry
dWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlu
a1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE1YjA5YzhhNWU5MTNk
NzdlZGViNzNlNmYxZDYyNWZjMmRmMmU4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1NDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKKworI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBsZXhH
ZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVk
ZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIFB1
dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKK3sK
KyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwor
fQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV92YXJpYW50cy5z
aHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOworICAgIAorICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6
CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJldHJpZXZpbmcgTExJbnQgaW5mb3Jt
YXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAgICAgICAgLy8gV2UgY2FuIGFkZCBz
dXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5j
ZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBv
biBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllciA9ICYo
cHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwoKTsKKworICAgIFN0cnVjdHVy
ZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIXN0
cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7Cisg
ICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkp
KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0s
IHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFB1dEJ5VmFyaWFu
dDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1B1dEJ5U3RhdHVzOjpQdXRCeVN0
YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpO
b0luZm9ybWF0aW9uOgorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNT
bG93UGF0aDoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2Vy
dmVkVGFrZXNTbG93UGF0aCA6IExpa2VseVRha2VzU2xvd1BhdGg7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Cisg
ICAgICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZlZFNsb3dQYXRo
QW5kTWFrZXNDYWxscyA6IE1ha2VzQ2FsbHM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFw
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1Yklu
Zm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRC
bG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8v
IEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BBUkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRp
ZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4g
Y29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJ
bmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGlu
ZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorewor
ICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnko
cHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1
bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoc3VtbWFyeSwgKnN0dWJJbmZvKTsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgeworICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgIAor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAg
ICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5m
by0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAg
ICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0
KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoYWNj
ZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0
QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNp
dGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGFjY2Vzcy5u
ZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vz
cy5pZGVudGlmaWVyKCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy51
aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4
R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1
czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNT
bG93UGF0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3Rh
dHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhdXRvIHZh
cmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1
cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9u
U2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5z
aHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQoreworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOworICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2Fs
bEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2Vs
aW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRD
YWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJ
Q1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0
dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAg
YXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0
dXMgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsK
KyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3Io
CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29k
ZUluZGV4LCBkaWRFeGl0LAorICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsK
KyAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisg
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBz
dGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1
cykKKyAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBi
eXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0
dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
Ym9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQor
eworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlm
IChwYXJzZUluZGV4KCp1aWQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9m
ZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQor
ICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRl
IGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAgICAgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxk
UHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhM
aWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNT
bG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRh
a2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQg
dmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhh
dmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAg
ICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNl
IGl0IG1lYW5zIHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5z
dGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBh
dGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAg
aWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNp
cyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQg
dGhpcyBpcyByZWFsbHkKKyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0
eSBjaGVja3MuCisgICAgCisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBv
biBkaWN0aW9uYXJpZXMuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisg
ICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQg
aXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0
IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Cisg
ICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFs
cmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICghdHJhbnNpdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgQVNTRVJU
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAgIGJvb2wgZGlkQXBwZW5kID0g
cmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGlkZW50aWZpZXIs
IHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
aWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1czo6bWFrZXNDYWxs
cygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0
aW9uOgorICAgIGNhc2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgTWFrZXNDYWxsczoK
KyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFNpbXBsZTogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Zh
cmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFr
ZXNDYWxscygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAoreworICAgIGlmIChvYnNlcnZlZFN0cnVjdHVyZVN0
dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMo
KSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRo
KTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IExp
a2VseVRha2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVz
OjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmll
ckZvcklDU3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShW
TSYgdm0pCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CisgICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpt
ZXJnZShjb25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUg
PT0gTm9JbmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBtZXJnZVNsb3cg
PSBbJl0gKCkgeworICAgICAgICBpZiAob2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRo
KCkgfHwgb3RoZXIub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCisgICAgICAg
ICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxs
cygpKSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgfTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2Ug
Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0g
U2ltcGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewor
ICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6Cisg
ICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAg
IGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiBtZXJn
ZVNsb3coKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBQdXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQor
eworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZpbHRl
cklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKKyAgICBmb3IgKFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRv
UmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBvdXQucHJpbnQo
IigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCJMaWtlbHlUYWtlc1Ns
b3dQYXRoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0
aDoKKyAgICAgICAgb3V0LnByaW50KCJPYnNlcnZlZFRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCJNYWtlc0Nh
bGxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtl
c0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZjNDY4YTI4NmViNWZi
NzFmOTE3YjgwODRjY2RjYTBmNGEyMjhiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgi
CisjaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2Ns
YXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hh
aW47CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmln
aW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1Yklu
Zm9NYXA7CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNh
Y2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAor
ICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisg
ICAgICAgIFNpbXBsZSwKKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFrZSB0aGUgc2xvdyBw
YXRoLgorICAgICAgICBMaWtlbHlUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtub3du
IHRvIHRha2Ugc2xvdyBwYXRoLiBXZSBhbHNvIG9ic2VydmVkIHRoYXQgdGhlIHNsb3cgcGF0aCB3
YXMgdGFrZW4gb24gU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIE9ic2VydmVkVGFrZXNTbG93
UGF0aCwKKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFrZSB0aGUgc2xvdyBwYXRoIGFuZCB3
aWxsIG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMsCisgICAgICAgIC8vIEl0IGtub3du
IHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLiBXZSBhbHNvIG9ic2VydmVkIHRoYXQgdGhl
IHNsb3cgcGF0aCB3YXMgdGFrZW4gb24gU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIE9ic2Vy
dmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzLAorICAgIH07CisgICAgCisgICAgUHV0QnlTdGF0dXMo
KQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCisgICAgeworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIHN3aXRjaCAobV9zdGF0
ZSkgeworICAgICAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIGNhc2UgTGlrZWx5VGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXND
YWxsczoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3R1Yklu
Zm9TdW1tYXJ5LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFB1dEJ5U3RhdHVzKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAg
ICB7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYs
IEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsK
KyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFN0cnVjdHVyZVNldCYsIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZh
dGVGaWVsZFB1dEtpbmQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0
YXR1c0NvbnRleHRTdGFjayYsIENvZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBz
dGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBMaWtl
bHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7CisgICAgYm9vbCBvYnNlcnZl
ZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE9i
c2VydmVkVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtl
c0NhbGxzOyB9CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiYg
dmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0QnlW
YXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhd
OyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5nbGVJ
ZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0
QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0aWMg
UHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsK
KyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9y
PFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5j
cHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJp
YW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFu
dCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQoreworICAg
ICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVyYXRv
cj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tp
bmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBtX25l
d1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAg
ICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRlbnRp
ZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1dEJ5
VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAg
cmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50
IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJhbnNp
dGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVyKENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikp
OworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
ID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsK
KyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3Ry
dWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFjZTsK
KyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFyaWFu
dDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtpbmQo
KSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25z
dCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1faWRl
bnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5v
dFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAgICBB
U1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKKyAg
ICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBs
YWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlv
bldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRp
b246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlm
ICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VkQ29u
ZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNl
dHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8
IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtT
dGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0
Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFtZXJn
ZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xv
dEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAg
IAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExpbmtT
dGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAgICAg
IG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpCit7
CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFjZS5t
X2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZz
ZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFTU0VS
VCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2lu
ZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBu
ZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0
aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Cisg
ICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJl
cGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNTdG9y
YWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5tX29s
ZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVy
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
K30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQoreworICAg
IGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0
cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jYWxs
TGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjwi
KTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVtcHR5
PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAg
ICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgb3V0
LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0
KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIs
ICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6CisgICAg
ICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1
cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtTdGF0
dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBSZXBs
YWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAgIAor
ICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgICAg
IDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAg
ICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVyKFdU
Rk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlhbnQo
Y29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29uc3Qg
UHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAgIAor
ICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwg
a2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIHZv
aWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRp
dGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3Ig
U2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZv
ciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyBy
ZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVy
Lm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNl
dCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAgIEtp
bmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVyZVNl
dCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0
ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAgICBD
YWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcuLmZj
ZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYyLDEw
ICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVz
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0YXR1
cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewotICAg
IGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0YXR1
c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0dXMq
IHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdh
dGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZvciAo
YXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vjb25k
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5ODNk
YmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1
c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMqIGFk
ZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRkSW5C
eVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERlbGV0
ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgRGVs
ZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAg
ICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0
ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1cz4+
PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM+
Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNlYjIz
ZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3ODE5
ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2Nr
KiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRH
ZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJRChj
b2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQdXRC
eShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxvY2ss
ICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4ZTZl
MjUwMWFhYjE4ZTU1ZDQxYTQuLmU2N2JjMTA4YmUzMjBkZDZkMjU5ZTc3YzgxYjlkNTFjNDVjZjU4
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFsLAot
ICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAgICBJ
bkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtMzY1LDYgKzM2Niw3IEBAIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgR1BSUmVnIGJyYW5kR1BSOwogICAgIH0gcmVnczsK
ICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcg
bV9hcnJheVByb2ZpbGVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFI7CiAgICAgLy8gRklYTUU6IFszMi1iaXRzXSBDaGVj
ayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMxN2Iy
ODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0
b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRT
dGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVj
dHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVy
KGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3ICsz
OTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVl
Lm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBpZiAo
dGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVhbGx5
IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQw
LDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJl
Y3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBhdXRv
IHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZCA/
IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUo
KTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUudG9T
dHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVy
KCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAog
ICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAg
ICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBu
ZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ3
Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRPSzoK
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTQ2
NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgp
KQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1
Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1cygp
LT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQyMGRm
YjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUzODZi
NjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xhc3Mg
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi5iNjI0NzhlZjQ2NmU2
YjZiNzI5NDY4NTNiNzAxZmQyZWQyYmQwZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUg
IkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03NCw3
ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHJp
dmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUg
IlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJl
Z0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2lu
Y2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBCeXRl
Q29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYp
OwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0g
ICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9m
IFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5k
IHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAgIE5v
ZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAg
ICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMp
OwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJl
Y3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Tm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2Rl
KTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25z
dCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3Rh
dHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgs
IEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAgICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtp
bmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2YXRl
RmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUpOwpA
QCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAg
ICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4gb25s
eSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24g
dGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlvdXNs
eSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVj
dHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50
LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1
cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVs
ZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5
U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmln
aHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZlciwg
dGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBm
dXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5Myw5
ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxvYWRl
ZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZh
bHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxh
Y2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0
dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2
YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5v
ZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAot
ICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFs
dWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVD
TUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9v
bCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQogICAg
ICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFwaChw
dXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAgICBh
ZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5
SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFN
b2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwg
Qnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIGlm
ICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRC
eUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygp
KSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3Qs
IGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFu
LmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0
dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZU
TCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6
OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
Z0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAg
fHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJl
Y3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBp
ZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0
QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgICAg
IGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUs
IHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCArNTAz
OCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAo
VU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29t
cGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAg
ICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJp
YW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0
QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0
dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJp
YW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJh
c2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVt
VmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRC
eVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2Fz
ZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1
dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2Up
OworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFz
ZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFs
dWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUw
NjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJp
YW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMs
IGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJp
YW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMo
Y3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1
dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVmYXVs
dDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1dEJ5
SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1
cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0
dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAg
ICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZv
cmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcElu
Zm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8
fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0
QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1v
cnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUo
KSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6
Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
cHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJ
ZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAg
ICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAo
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewog
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0
YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRz
KCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAg
ICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAg
IGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkg
PT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07
CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewogICAg
ICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRT
dGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0
YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgc3Rv
cmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAo
VU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7
CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJUKHBy
aXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFz
ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZz
ZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
OwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJ
ZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1f
YmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUlu
ZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5
dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVj
b21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8g
aW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29tZSBp
bmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hlZCBj
ZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjc3
OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAgICYm
IGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQ
dXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZh
bEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5p
c1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAg
ICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAg
ICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3Rh
Y2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAg
ICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5n
bGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRl
bnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
aXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJ
bmZvKHVpZCksIHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2
YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0
YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGls
ZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5m
byhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYs
MTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1f
ZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVz
IHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAg
ICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21h
TW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5
U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFN
b2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAg
fQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xv
YmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwog
ICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFs
c2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZp
ZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVz
OjpMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1sw
XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwg
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTg4MTQsNjIgKzg4MDMsNDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VDb2RlQmxvY2soKQogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVj
b2RlSW5kZXggb3NyRXhpdEluZGV4KQogeworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29k
ZS5tX2Jhc2UpOwogICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkp
OwogICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNE
aXJlY3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAg
Ym9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlk
U3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwotICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5t
X2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJ
bmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVj
b2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21l
cyBudWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1h
dGlvbi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlW
YWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93
UGF0aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAm
JiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmll
ci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogCisgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBt
X2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50
Q29kZU9yaWdpbigpKTsKKworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAgICAgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVy
KCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRl
bnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2Vs
bCgpKSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
ZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3Vy
cmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBi
eXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1
ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAgICAgICAg
ICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNt
YU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKLSAgICAgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKIAogICAgICAg
ICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkp
OwogICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KG51bGxwdHIpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICBh
ZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgotICAgICAg
ICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1
dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNt
YU1vZGUpKTsKKyAgICAgICAgTm9kZSogcHV0QnlWYWwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gUHV0QnlWYWwgYW5kIFB1dEJ5VmFsRGlyZWN0IG11c3QgYmUgdHJlYXRl
ZCBhcyBpZiB0aGV5IGNsb2JiZXIgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFr
ZSB0aGVtIGdlbmVyaWMuCisgICAgICAgIGlmIChzdGF0dXMub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHVi
SW5mb1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmFkZChw
dXRCeVZhbCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZm
MjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRl
eCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1
MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBAQCBib29s
IGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhj
ZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
ICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBA
IC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAg
ICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3Ry
dWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVw
bGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFu
dC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3
IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
bm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVk
Z2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2
b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNv
bnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hp
bGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRv
UHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBu
b2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgaWYgKGRp
ZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBO
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFz
cyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFz
ZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAor
ICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAg
ICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAg
ICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUt
PmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmll
bGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4
ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0
aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3
U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtp
bmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0
Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7
CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3Rh
dHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBFZGdlKGJh
c2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5l
NjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2
YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5lMjViMWYzODU0OTM1NGFlMTMyYWRkYmNiNjhhY2I5
ZGE4MGI1Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKQEAgLTEyMzYsNiArMTIzNiwxMCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNlPihjaGlsZDIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGNoaWxkMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAg
IC8vIER1ZSB0byByZWdpc3RlciBwcmVzc3VyZSBvbiAzMi1iaXQsIHdlIHNwZWN1bGF0ZSBjZWxs
IGFuZApAQCAtMjg2NSw3ICsyODY5LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZjOWRjNDM5
NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5NTA4NzYz
OGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTM4NSw4
ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIq
IHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0YXR1cygp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwotICAgIGlm
IChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgKm5v
ZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVzKCkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAgIGlmIChu
b2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
ZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSk7
CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CmluZGV4IDYyYTFmZWYzZGMyY2RkZTEwOTE1MjRkNjczNDA4NDBmZDNmMjYwYjEuLjFiZWM4ZGVl
ZDlkYmRiYTUwN2Q5YTNmYjFiMDM5ZTI2ZWUxYWRkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKQEAgLTEyMDIsNiArMTIwMiw3IEBAIGNsYXNzIEdyYXBoIGZpbmFsIDogcHVi
bGljIHZpcnR1YWwgU2Nhbm5hYmxlIHsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0
cnVjdHVyZTsKIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd0dldEJ5VmFsOworICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fc2xvd1B1dEJ5VmFsOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZj
OWRiMWE3YzU0NGZhMWNhOThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5
YTc5MTg0MmU4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0
aFRoaXMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxz
LCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5r
QnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFh
NDA5NGY1NzA2MGE3Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkx
YjI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAt
MTk5LDYgKzE5OSwxMSBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMg
ewogICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJ
ZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlW
YWwoY29uc3QgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3Jh
cHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAg
IHZvaWQgYWRkRGVsQnlJZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRo
R2VuZXJhdG9yKiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElu
bGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBA
IC0zNjAsNiArMzY1LDcgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJz
IHsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElu
bGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9w
dXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJh
dG9yPiwgND4gbV9kZWxCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRJbkJ5SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2
NGYwZDZmNDY0NjY0ZDBmLi4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsx
MDYsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0
YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5Ogog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFk
Mjc3YTE5YmQxYzlhLi43Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAj
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxv
Y2F0aW9uLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAK
IHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcjsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3Rv
cjxQdXRCeVZhcmlhbnQsIDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0z
MjEwLDE1ICszMjEwLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPEluQnlTdGF0dXMqPigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0
dXMoKQorICAgIGJvb2wgaGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gRmlsdGVyUHV0QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVy
UHV0QnlTdGF0dXM7CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0
dXMoKQorICAgIFB1dEJ5U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NF
UlQoaGFzUHV0QnlJZFN0YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5
SWRTdGF0dXMqPigpOworICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAg
IHJldHVybiBtX29wSW5mby5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBo
YXNEZWxldGVCeVN0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggZTc1YmNmZThhMWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2Zk
YWM4ZjIzNTE4Mjg3MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oRmlsdGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1h
Y3JvKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhG
aWx0ZXJQdXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRl
bGV0ZUJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJT
ZXRQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRl
eCBiMWNmZWU4YWNlYzM4Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4
YjFjNGNmYTZhMzExMDI4Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMTUsMjEgKzIx
NSw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVy
UmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2FzZSBJbmxpbmVDYWxs
RnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJD
YWxsOiB7Ci0gICAgICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3Bf
cHV0X2J5X3ZhbCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUgb3BfcHV0X2J5X3Zh
bCBhcyBQdXRCeUlkIGFuZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVuIHdlIGZvdW5kIFN0
cnVjdHVyZVN0dWJJbmZvIGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAgICAgICAgICAgICAg
Ly8gQnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZpbmQgU3RydWN0dXJl
U3R1YkluZm8gaGVyZS4gTGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpby4KLSAg
ICAgICAgICAgICAgICAvLyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlzIGNvbXBpbGVkLgot
ICAgICAgICAgICAgICAgIC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAgICAgICAgICAgICAg
Ly8gMy4gU2luY2UgKEEpIGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcHV0X2J5X3Zh
bCwgKEIpIGNhbiBnZXQgU3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQg
YXMgaW5saW5lZCBTZXR0ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0LiAoQSkncyBKSVRE
YXRhIGlzIGRlc3Ryb3llZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNv
bWVzIExMSW50LgotICAgICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxvY2sgaW5saW5pbmcg
KEEpIGdldHMgT1NSIGV4aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkg
Z2V0cyBCYXNlbGluZSBDb2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgLy8gNi4gKEIp
IGdldHMgT1NSIGV4aXQuIChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJ
bmZvIGluIChBKSBmb3IgUHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBk
b2VzIG5vdCBleGlzdCBzaW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQgb25jZS4KLSAgICAg
ICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5maW5kQnlWYWxJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBieVZhbEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4o
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1
YkluZm8tPmRvbmVMb2NhdGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKaW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhm
ZDU4YS4uMWY0MTgzMThhNGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKQEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0
eXBlIGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
dCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVl
IGhhcyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRl
dmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShu
dWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcg
QEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5
U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYy
ZWNlODBmZTc0ZjIuLjg5ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01h
cFNldDoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRi
OWM5YTVhMjAuLmQ1NDk2NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyAr
MzU5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZTMyNDdm
OGM2OTI2ZDI5N2I2Y2EyY2YxNGUyZDZiNWQ5OTNlYjZiLi42MDNmZjdiMmU1MmRjZWVlM2JjMzY1
ZGJjNGVlMzNiM2MzN2UxZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3
OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uZDQ1NWNhNGU2OGU0NzBiZDRiOTZiZTBhZTFhOTAyOWQ3
YmVhY2VhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCkBAIC0zMTc3LDM0ICszMTc3LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgp
ID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5vcCgpKTsKLQotICAgICAgICAgICAgaWYgKGNoaWxk
MS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JDZWxsV2l0aFN0cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5z
KG5vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQo
KSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQo
KSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckNlbGxXaXRoU3RyaW5nKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVz
ZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yQ2VsbFdpdGhTeW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcyKHRoaXMsIGNoaWxkMik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0
aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIo
KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOworICAgICAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlW
YWxEaXJlY3QpCisgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1v
ZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRp
b25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
ZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAg
ICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBjaGlsZDEpOwotICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGlsZDIpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMyh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcx
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIs
IGFyZzNHUFIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBjaGlsZDIsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1
YkluZm87CisgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Cisg
ICAgICAgICAgICAgICAgc3R1YkluZm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGNoaWxkMik7CisgICAgICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgY2hpbGQzKTsKKworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAg
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbm9kZS0+ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIElu
dmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAg
ICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
CisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICAgICAgICAgIGF1dG8gb3BlcmF0
aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9qaXQuYWRkUHV0QnlWYWwoZ2VuLCBzbG93
UGF0aC5nZXQoKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7CisKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01ODcxLDcgKzU5MzEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAKaW5kZXggYjkwNjY1ZWNjZTUyYzU3ZjQ0YjcwZDQ2N2M0YTRlNWE1ZjM3MDJlMC4uOTdi
YjZlMDg2OTkzNTIzYzI5ZTFlMTEwYTIwNDM4MDI5YTBkMjdkMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAKQEAgLTIzMyw2ICsyMzMsMTUgQEAgY2xhc3MgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFy
cmF5OgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OiB7CisgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDApOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1
dEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkgJiYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8
fCBjaGlsZDEudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zaWRlckJhcnJpZXIoY2hpbGQxLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czoKICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAx
MDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQy
NGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApA
QCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4
YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4
YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFl
NjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3
YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNk
MjRkYWU4ZWY3MTAwLi4xYjBlZjM5YzU1MTEyMTgyNTk1OTc2OGYxNDlkZjBkODZmOWZhZDQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0x
NjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNTU1Niw1NyArNTU1NiwxNTUgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAgICAgICAg
Y2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKLSAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAg
ICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdENlbGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nTm9uU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
Q2VsbFN0cmluZ1N0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJp
bmdOb25TdHJpY3Q7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250
YWlucyhtX25vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVz
ZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51
c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlv
bl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxs
U3RyaW5nU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nTm9uU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3RyaW5nKGNoaWxkMiks
IGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9w
ZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dT
dHJpbmcoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIu
dXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2Rl
LT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0OworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9p
ZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSks
IGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxv
d0NlbGwoY2hpbGQxKSwgbG93U3ltYm9sKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOwotICAgICAg
ICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAg
ICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbERpcmVjdE5vblN0cmljdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdDsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0OworICAgICAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOwor
ICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RT
dHJpY3Q7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2Rl
KCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICAg
ICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAg
ICAgICAgICAgICAgICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxv
d0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAg
IFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxvd0pTVmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShj
aGlsZDMpKTsKKworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKworICAgICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGNoaWxkMSk7CisgICAgICAgICAgICBMVmFsdWUgcHJv
cGVydHkgPSBsb3dKU1ZhbHVlKGNoaWxkMiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoY2hpbGQyKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShjaGlsZDMpOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3RyaW5n
ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIHByb3BlcnR5SXNJbnQzMiA9IGZhbHNlOworICAg
ICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3ltYm9sID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
YWJzdHJhY3RWYWx1ZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0
VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgcHJv
cGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUo
Y2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CisKKyAgICAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIocHJvcGVydHkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lz
dGVyKHZhbHVlKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX25vdENlbGxNYXNr
LCBWYWx1ZVJlcDo6bGF0ZVJlZyhHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9udW1iZXJUYWcsIFZhbHVlUmVwOjpsYXRlUmVn
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6RlRMSklUKSA/IDEgOiAwOworCisgICAgICAgICAgICBSZWZQdHI8UGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9m
dGxTdGF0ZTsKKyAgICAgICAgICAgIENvZGVPcmlnaW4gbm9kZVNlbWFudGljT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX25v
ZGUtPmVjbWFNb2RlKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbV9ub2RlLT5vcCgp
ID09IFB1dEJ5VmFsRGlyZWN0OworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2lucy0+YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChub2RlU2VtYW50aWNPcmlnaW4pOworCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAg
ICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPSBleGNl
cHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBleGl0IGZvciBjYWxsIElDJ3MgY3JlYXRl
ZCBieSB0aGUgSUMgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAv
LyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2ls
bCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0
ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENy
ZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gcGFyYW1zWzJdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdw
U2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdlbmVy
YXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdp
biwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRH
UFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHByb3BlcnR5SXNTdHJpbmc7CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSBwcm9wZXJ0eUlzSW50
MzI7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gcHJvcGVydHlJc1N5bWJvbDsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwg
ZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRo
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1Bh
dGhDYWxsOworICAgICAgICAgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwg
bm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
U2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24sIEludmFsaWRHUFJSZWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNl
bWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3It
PnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJl
cG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZl
ciwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtODk1MSw3ICs5MDQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0
YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xk
U3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CkBAIC04OTY2LDE2ICs5MDY0LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwor
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArOTA4NSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3Jh
Z2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3
ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1
YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3Rz
KGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUg
IlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYw
NGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0
YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNy
byhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2Vs
ZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0
QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1h
Y3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAog
ICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBl
ZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7
CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAg
bV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJ
ZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJ
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09
IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJ
ZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2lu
QnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5z
dGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6
ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDZjNGYxMWY2OGU5
MDNlYmE2N2M2ZDdlYTkzODdkODFiNDU2YWUwZjUuLjZjMzRhYzY3M2EyODJjODhiYTFlYmNmYzRh
Y2UxODU1ZmEwMjM4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CkBAIC0yNjcsMTYgKzI0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGxpbmsoKTsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNo
ZWFibGVJZGVudGlmaWVyKTsKLQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0
ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxl
SWRlbnRpZmllcik7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKLQogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTM4MiwzOCArMzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVj
b2RlKTsKIAogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJy
YXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3Bl
Y2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUg
Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAgICAgLy8gUHJv
cGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVj
aW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRl
ZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCi0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQu
IEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAg
ICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMyU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgRG91YmxlU2hhcGUpOwotICAgICAg
ICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0
Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRH
ZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwot
ICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlz
dCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hh
cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbElu
Zm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0x
MDY0LDYgKzEwMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5
VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0
QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4g
bV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFs
czsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0x
MDkxLDYgKzEwMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRC
eVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVgg
fTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAg
IHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQg
bV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhh
MWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uYTRiYjhmOGJkZDA3NjhiYWM5MzlhODI3ZDU2
YjZiOWIyZDRjZDU1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50
aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRL
aW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5
cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNv
ZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5
SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKICAgICAgICAgLCBt
X2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAt
MzgxLDYgKzM4MSw0MyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiAgICAgICAgIG1fc3R1Yklu
Zm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAor
SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0
eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHVi
SW5mb0dQUikKKyAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9iYXNlKGJhc2Up
CisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworCisgICAgbV9zdHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9h
ZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJlZ3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXls
b2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7
CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiA9IHN0dWJJbmZvR1BSOworICAgIG1fc3R1
YkluZm8tPm1fYXJyYXlQcm9maWxlR1BSID0gYXJyYXlQcm9maWxlR1BSOworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7Cisg
ICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJ
bmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJvcGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwor
dm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYgaml0KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0
Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZl
ciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBm
YXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5t
X2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9y
KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ss
IGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdp
c3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4
ZjdmYi4uMzVhNzdmOGU3Mzk2ZTQ2MjdlY2Q2ZTA4YzUwNDBjZDE0ZmU0NTc0MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApA
QCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkK
LSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0MCwzNyBAQCBj
bGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3Ig
ewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2
YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7
IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xh
c3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1Ymxp
YzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFs
dWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAg
ICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1wOworICAgIH0KKworICAgIHZvaWQgZmluYWxp
emUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExp
bmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CisKK3ByaXZhdGU6CisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1f
dmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNsYXNzIEpJVERl
bEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsK
ICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDE3YzI3ZmRjMWNkM2JmNjMyNmE0
M2I1ZmVmODFlNjBlNmNjNDdmMDIuLjY3ZTBiNzgzMDlhNDNmMmJiYjk5YTkxYjM2ODliOTI3YjI2
MmRiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC0zNTIsNiAr
MzUyLDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlCiAgICAgfQogfQogCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7Cisg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBsb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2Zp
bGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKKyAg
ICB9Cit9CisKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3Bl
Y2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7CiAgICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKQEAg
LTM2MiwyNCArMzcwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlT3V0T2ZC
b3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmkKICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk91dE9mQm91bmRzKCkpOwogfQog
Ci1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSog
cHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJvZmlsZVNhdyA9IFtdIChBcnJheU1vZGVzIGFy
cmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KSB7Ci0gICAgICAgIHJldHVybiBhcnJh
eU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7
Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9j
b2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVk
QXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2Rlcywg
RG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklURG91YmxlOwotICAgIGlmIChhcnJheVBy
b2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRJbnQz
MjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEFycmF5U3RvcmFnZVNoYXBl
KSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKLSAgICByZXR1cm4gSklUQ29udGln
dW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4ZDc3NWJlY2M3MWY4MTkyNGNiOTNjOTcuLjdm
ZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRhOTcxOWEyOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVy
KSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5v
dERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlL
aW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRy
X3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
LSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5k
OjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRy
X3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
LSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmpl
Y3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJl
Y3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VP
YmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6
OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJf
dCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQot
ICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVj
dCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9i
amVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6
QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0
ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwg
KnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAg
ICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRT
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlk
LCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05
MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRf
VU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAg
ICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwg
cHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlw
dCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2Rl
KQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQu
dHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRo
ID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
YnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBp
ZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2
YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEs
MzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFs
dWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9
CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQ
cm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJs
ZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZh
bEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZh
bHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAK
LXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwg
QnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRy
eUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAg
c3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBA
IHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5
UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBA
IHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNl
SW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5p
c1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hv
dWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5m
by0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0
eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9k
ZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2
bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAt
MTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAg
ICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0
aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVl
LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0
aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VW
YWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYg
c3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4
KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVj
dHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkp
IHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFy
cmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0
QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAg
ICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAg
ICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBwcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21l
IG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0
IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGlt
aXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUlu
Zm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjpp
c0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCks
IGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChz
dWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAo
c3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAg
ICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5k
ZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAg
ICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlW
YWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNv
ZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5
VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5
IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5m
by0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3Jp
cHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwo
KSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0
aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAg
ICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwo
KSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICBy
ZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJl
LCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6
Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRp
b25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9u
UmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3Jl
IHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAg
ICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNl
ZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMg
MTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAg
ICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQg
dXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVw
LgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZh
bE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVz
dWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2
ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlW
YWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7
Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2Jq
ZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsK
KworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01B
TW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1Zh
bHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUg
aWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7
CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlw
dCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
CisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFN
b2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwg
RUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0
dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Cisg
ICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBB
dHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGpp
dEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlW
YWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+
aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAo
c3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBi
eVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGly
ZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0
aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRp
cmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZh
aWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5k
ZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBp
ZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYm
IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2Ug
aWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2Ny
aXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbElu
Zm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwg
Y29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlW
YWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkg
YWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZv
LT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlw
dC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29k
ZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBi
YXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVp
Znkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisK
KyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRp
ZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBt
b3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAg
ICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdl
IHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2
ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQot
ICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291
bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2
ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAg
ICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsK
LSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2Rl
KSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmls
ZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5
VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBz
dWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1Mp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1
bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZl
ciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZh
bEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJl
dHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVj
dFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbElu
Zm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1
YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9u
UHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7
CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlw
dCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
Ci0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUs
IGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLUpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisg
ICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxP
YmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJv
bG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCiAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNW
YWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5m
bywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAg
ICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNj
cmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9m
aWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9w
ZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUp
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3Jp
cHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1v
ZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAyNTg0ZTk5NWU0NjZkZTk0YTliMjAzMjdiMGVj
NDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0YmU4M2UwNmJlMDYyNTdiZmMyOWNjNDYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsy
MDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZh
bEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZv
KiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9k
ZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNN
QU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5
UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVBy
b2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwg
QXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxp
bmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCos
IENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKaW5kZXggM2QxZDg0ZmM4MjAyYmY4ODliZGYyMGVhMzM4ZGY4YTkxMTA5
MDYzYi4uMzdjNmM1OWYyZDA2ZDM4ZTY2MjE3ZDYwNTYwMzkxYmI2MzhmNzZiYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCwx
NzggKzQzOCwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAg
IEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBib29sIHByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
OwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKLSAgICAgICAgbW92ZShJ
bW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOwotICAgIGVsc2UK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUp
LCByZWdUMyk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJc0lu
dGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0byBpc0ludDMyID0gYnJhbmNoSWZJbnQz
MihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZv
LT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAg
ICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5v
dEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQg
aW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdU
MSk7Ci0gICAgfQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDMsIHJlZ1Q0KTsKIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgaW5s
aW5lPwotICAgIGxvYWQ4KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlz
Y09mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2Rl
ID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERv
dWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3Vv
dXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0
ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKKyAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7CisgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJ
bmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWND
b250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29y
cmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1No
YXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5t
X2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAg
aXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihp
bmRleGluZ1NoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0K
LSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkg
ewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdEludDMyKHJlZ1QzKSk7Ci0gICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVT
aGFwZTogewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOwot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIEp1
bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDMpOwotICAgICAgICBtb3ZlNjRUb0RvdWJsZShy
ZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBS
ZWdUMCkpOwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShm
cFJlZ1QwLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmU2NChy
ZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBvdXRPZkJv
dW5kcy5saW5rKHRoaXMpOwotICAgIAotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNp
YWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEs
IHJlZ1QzKTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0
aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dD
YXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYg
KGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAgICAg
ICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJn
ZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxp
bmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBl
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAg
SnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0KLSAgICBMYWJlbCBz
dG9yZVJlc3VsdCh0aGlzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Myk7Ci0gICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIo
Ynl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5k
ID0ganVtcCgpOwotICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zm
c2V0KCkpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0g
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRo
aXMpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVuZC5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBp
biBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KQEAgLTY2MiwxMiArNTE4LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBF
Q01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUp
IHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkK
QEAgLTY3NSw0OCArNTM0LDQwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQog
ICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAg
ICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIHJlZ1QyLCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJl
cmVkLgorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIwOworICAgIC8vIFRoZXkgYXJlIGNvbmZp
Z3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KKyAgICAvLyBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgLy8gY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OworICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZh
bEluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpLCBlY21h
TW9kZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
CiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IGlz
RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGlt
aXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xv
d1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTczMSwyNCAr
NTgyLDIzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMDsKLSAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Ci0KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVu
dEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKIAorICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQ
Uik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk+KGdsb2JhbE9i
amVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgZWNt
YU1vZGVHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsKICAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1wKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBC
eVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKKyAg
ICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CiAgICAgZWxzZQog
ICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgxMCwxMyArNjYwLDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFs
SW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIg
PSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwg
YnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihwdXRLaW5kLnZhbHVlKCkpLCBw
dXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
cHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKQEAgLTg1MiwxNCArNzAyLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHCiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBhcmd1bWVu
dEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BSID0gYXJndW1lbnRHUFI1Owog
CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBn
bG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwog
Ci0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1l
T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVBS
LCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7
CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpAQCAtMzI5MSw4MiArMzE0MSw2IEBAIHZv
aWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3Rl
cklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9
IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEpJVEludDMyOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwg
bnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIp
OwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAg
bmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklU
QXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAg
ICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IG5ldmVyIGNv
bWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Ci0gICAg
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2Fj
aGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRh
cmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1Bh
dGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5kb25lVGFy
Z2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAgICAgIEFTU0VS
VChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxlQWRk
cmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
KSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYXJDYWxscy5sYXN0KCkuZnJvbSwgbV9m
YXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0RpcmVjdCA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsK
LSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBG
SU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlf
dmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2Nr
KS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAgICAgCi0gICAg
fSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJS
b3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWxfZGlyZWN0IHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRh
KCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbElu
Zm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAg
IGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9iYWRUeXBl
SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMg
ZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAo
SklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBz
cGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFs
SW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci10ZW1wbGF0ZSB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUp
OwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRlTmFtZVdpdGhDYWNoZWRJZChC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0zNDA4LDIyMyArMzE4Miw2IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKChwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJl
Y3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0g
b3BfcHV0X2J5X3ZhbCkpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJ
ZChieXRlY29kZSwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7
Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNh
c2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmICghbV9leGNlcHRpb25DaGVja3Mu
ZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlW
YWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNp
dGUgOiBtX25lYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwot
ICAgIH0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9mYXJDYWxscykgewotICAg
ICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBnZW4uZmluYWxpemUo
cGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVyKTsKLQotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZm
ZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCVz
IHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwIiwgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0KSA/ICJfZGlyZWN0IiA6ICIiLCBwcm9w
ZXJ0eU5hbWUudWlkKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIGJ5VmFsSW5mby0+c3R1
YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9ub3RJbmRleEp1bXBU
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93
T3BlcmF0aW9uID0gcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9ub3RJbmRl
eEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsK
LSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uc3VtZWQgZnJvbSBhbm90aGVy
IHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwKLS8vIHNvIHdlIGxpc3Qgb2Zm
IHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFkdmFuY2UuCi10ZW1wbGF0ZSB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPihC
eVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVy
KTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElk
PE9wUHV0QnlWYWxEaXJlY3Q+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQs
IENhY2hlYWJsZUlkZW50aWZpZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAg
UmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3Jh
dGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNl
Ci0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9
IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0g
cmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
bG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3Jy
ZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVB
ZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBl
YXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkp
KTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRP
ZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgp
KTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKSk7Ci0jZWxzZQotICAg
IGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpKTsKLSNlbmRpZgotICAgIAot
ICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3Zh
bCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8g
YmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25h
bGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNo
MiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkg
ewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7Ci0gICAgICAgIEFTU0VS
VCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gz
MihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAg
ICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVz
dGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRj
aCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAoKTsKLSAgICAgICAgdG9vQmlnLmxpbmso
dGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZmYpLCBlYXJseVNjcmF0Y2gpOwot
ICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7
Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBjYXNl
IDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAg
ICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHks
IFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgc3RvcmUz
MihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91
cikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0
ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBl
ZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7Ci0gICAgCi0gICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0
eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVn
aXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gy
ID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lz
dGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJl
Z1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAg
ICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgZWFybHlTY3JhdGNoLCBU
cnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgICAgICAgICBm
YXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRo
aXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJy
YXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVk
QXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2Ny
YXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0
Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0g
ICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBh
ZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKLSAgICBtb3ZlNjRUb0RvdWJs
ZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZWxzZQot
ICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1w
IGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKTsKLSAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIEp1bXAgcmVhZHkgPSBq
dW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0
VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2NyYXRjaCwg
ZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbmRpZgotICAgIAotICAgIC8vIFdl
IHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0
IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9i
YmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25hbGx5QW5kVW50
YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNj
cmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewot
ICAgIGNhc2UgNDoKLSAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdU
MCk7Ci0gICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBw
cm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAg
ICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCBlODI2OWZkMWUx
OTlmMTUyNDg0ZWI0NGRkZWYyYWFkMTc3ODIzMmZhLi5mNWI4NDE4OTg2ODM1ODUzYTlkNDZhY2Fm
ZTAyYWViYTY1MTU5Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ2NiwxNTEgKzQ2NiwyOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBhZGRTbG93
Q2FzZShub3RJbmRleCk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCBwcm9maWxlLCByZWdUMSk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8g
dGhpcyBpbmxpbmU/Ci0gICAgbG9hZDgoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5
cGVBbmRNaXNjT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEpOwotICAgIAotICAgIEpJVEFy
cmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1
dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFs
KGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRl
Y29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdl
bmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKLXsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIEVDTUFNb2RlIGVjbWFNb2RlID0g
Ynl0ZWNvZGUubV9lY21hTW9kZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVf
djxPcCwgT3BQdXRCeVZhbD4gPyBQdXRLaW5kOjpOb3REaXJlY3QgOiBQdXRLaW5kOjpEaXJlY3Q7
CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbElu
Zm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIG91
dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgCi0gICAgTGFiZWwgc3Rv
cmVSZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwot
ICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgICAgIHN0
b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJl
Z1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbnRp
Z3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAg
IGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMyk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIo
cmVnVDEpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0g
ICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwot
ICAgICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdUMCk7Ci0gICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAgICAgICByZWFkeS5s
aW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMs
IHJlZ1QyLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0
OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVz
cyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAg
IGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAot
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
LSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8p
Ci17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgZW1pdExvYWQyKGJhc2UsIHJl
Z1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1Q1LCByZWdUNCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUNik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKKyAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Q2LCByZWdUNyk7CiAKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKGJ5VmFsSW5mbyk7Ci0g
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZElt
bTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcp
OworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgSnVt
cCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
OwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3Jl
MzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSkpOyAvLyB0YWcKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5r
KHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gz
MihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1Qz
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAg
IHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2Ug
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1
Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2Up
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQpAQCAtNjIwLDEyICs0OTcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAg
IEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29k
ZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0Rp
cmVjdCkKQEAgLTYzMywyMSArNTEzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAg
ZWxzZQogICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7
CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAg
CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwogICAgIC8vIFRoZSByZWdp
c3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGlu
ZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0
Zm9ybXMuCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1Qx
LCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJl
Z1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZv
LCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0
aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5y
ZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpT
VmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3
MjEwZjM1ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQx
OTQzZjhjODFkN2YyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAt
NTY4LDUzICs1NjgsOTQgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVy
aWMpOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBl
KCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQog
ewotICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0Ogot
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChw
dXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2gg
KHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtp
bmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1h
a2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRL
aW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRC
eUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5k
KSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAg
ICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5k
OjpCeUlkOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAg
ICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRj
aCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
fQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRL
aW5kKQorc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OwpAQCAtNjgyLDggKzcyMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xk
U3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2Uo
bG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6
c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVw
Tm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0
Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNo
UHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtp
bmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwog
ICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7CisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBw
dXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRl
eCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFz
ZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlm
ICghaW5kZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAg
ICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nh
c2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2Ut
PmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAg
ICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhD
bGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5
cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
eXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5
IGluIElDCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAg
IGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewor
ICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAg
ICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVs
bCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBz
dHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2
ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJl
cGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAg
ICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
LCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNN
QU1vZGUgZWNtYU1vZGUpCkBAIC05ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5m
bywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7
CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxv
Y2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5
TmFtZSk7CkBAIC0xNzU2LDI4ICsxODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAg
ICAgfQogfQogCi12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAg
IHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUpOwotICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVp
bnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2Nr
LCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGlt
aXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6
ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwot
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5n
IEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywg
c3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkK
KyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVBy
aXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0
QnlLaW5kOjpCeVZhbDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgm
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1
bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQ
dXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAg
ICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2
b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmlu
ZGV4IGMxOWYwMmQ0ZDQwMTk1ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBh
MmVmODRhMjNkOWVjMmRkNDhjZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5oCkBAIC00Myw2ICs0MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJp
dmF0ZU5hbWVCeUlkLAogfTsKIAorZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisg
ICAgQnlWYWwsCit9OworCiBlbnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBC
eVZhbApAQCAtNTYsNyArNjEsOCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBh
dGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFz
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5
KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwot
dm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUs
IFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1
dEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBQdXRCeUtpbmQsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxP
YmplY3QqLCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1
cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwg
RUNNQU1vZGUpOwogdm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayos
IEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hI
YXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpA
QCAtNjksNyArNzUsNyBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYpOwogdm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBD
YWxsVmFyaWFudCk7CiB2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFB1dEJ5S2luZCk7CiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBEZWxCeUtpbmQpOwogdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBh
ODcxNTVhYzVjNDJkZDNiLi43MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93
aW5nIGlzIGEgc2V0IG9mIGFsaWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRl
ZAotLy8gYmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQg
UHV0QnlJZFN0YXR1cy5jcHApCisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0
QnlTdGF0dXMuY3BwIGFuZCBQdXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhl
IG9wY29kZXMgZXhwZWN0aW5nIHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8v
IEluIHRoZSBDTG9vcCBpbXBsZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNl
LCB3ZSBzZXQgdXAgdGhpcwogLy8gYWxpYXMgaGVyZS4K
</data>
<flag name="commit-queue"
          id="459339"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436341</attachid>
            <date>2021-08-24 15:25:01 -0700</date>
            <delta_ts>2021-08-25 14:05:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210824152500.patch</filename>
            <type>text/plain</type>
            <size>331188</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi4wYjQ2YjIzMjY4YmRhOTRm
YjJjNGQ5MjQ1Nzk4YWI1Y2ZkMTBmOWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDAgQEAKKzIwMjEtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBw
aW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25zdCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6S2V5KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c01hcC5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6Omdl
dFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
OjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0
QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6
OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6dmlz
aXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFw
KToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbHRlcik6
CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVZhcmlhbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1
dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6dHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25zdCk6CisgICAgICAgIChK
U0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpQdXRCeVZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpQdXRC
eVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmlkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBzKToKKyAgICAgICAgKiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVjb3JkZWRTdGF0
dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjp2
aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRlZFN0YXR1c2VzOjphZGRQ
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNTdGF0dXMpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RvcmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyc0V4
aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnRyeUZvbGRBc1B1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNQdXRCeUlkU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwdXRCeUlkU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1
cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9F
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRC
eVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpT
Q19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpwdXRCeVZhbE9wdGltaXpl
KToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgIChKU0M6
OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlEaXJlY3RQ
dXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlND
OjpyZXBhdGNoUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlSW5CeSk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZVB1dEJ5SUQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmg6CisK
IDIwMjEtMDgtMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwgc2hvdWxkIG5vdCBsb2FkIGlu
ZGV4aW5nVHlwZSB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGFkZDZjYjQzMjI5MjdmMjIxNWE2MzJkMzg5M2JkYzljMzgyNWZhN2EuLjMyM2Q4YTQwZTFmNmUy
M2ZjZTI3ZWQ3YzA4ZGI1MzI0NzNiMjZhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC00NjQsOSArNDY0LDkgQEAKIAkJMEY5MzI3NUYxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2Jq
ZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlFMTRDQTdE
QzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdldEJ5U3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NjE0Q0E3REMxMDA4NUYz
QzYgLyogR2V0QnlTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUEx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyog
UHV0QnlTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMkE1MTRDQTdEREQw
MDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjkz
QjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlz
aXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NTJBQkQxQjQ4N0E3NzAw
QzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJl
ZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk2MzAzQTFENDE5MkM4MDA1NjA5RDkgLyogQ2VsbEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzMDM2MUQ0MTkyQzMw
MDU2MDlEOSAvKiBDZWxsQXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yODY2LDExICsyODY2LDExIEBACiAJCTBGOTMzMjk0MTRD
QTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlTdGF0dXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0QnlTdGF0dXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJ
ZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5U3RhdHVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
dXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTNCNEE4
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlWYXJpYW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5VmFyaWFudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZh
cmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlWYXJpYW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTUyQTlGMURGNzg2MDcwMEUwNkZCRCAv
KiBWaXNpdFJhY2VLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmlzaXRSYWNlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJBQTAx
REY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaXNpdFJhY2VLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5NTJBQkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrZWRSZWZlcmVuY2VzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OTUsMTAgKzg2OTUsMTAgQEAKIAkJCQkwRkQz
RTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCAqLywKIAkJCQkwRjE1
Q0QyMDFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCAqLywKIAkJCQkwRjE1Q0Qy
MTFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggKi8sCi0JCQkJMEY5MzMyOTkxNENB
N0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjlBMTRDQTdE
QzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCi0JCQkJMEY5M0I0QTcxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKLQkJCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKKwkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAv
KiBQdXRCeVN0YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuY3BwICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeVZh
cmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICov
LAogCQkJCTBGNDRBN0FEMjBCRjY4NUYwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmNwcCAq
LywKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0dXNlcy5oICov
LApAQCAtMTA1MDYsOCArMTA1MDYsOCBAQAogCQkJCTc5MTYwREJFMUM4RTNFQzgwMDhDMDg1QSAv
KiBQcm94eVJldm9rZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3
MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTMzMkE0MTRDQTdE
RDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjkzQjRB
QTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQ
cm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cmlu
ZGV4IGE2NDcwMmRiNjAxY2MyMWFiYjRjMjYyOTQ1N2RkMWE3NTljMzAyMGQuLjcwNzdlZjlhZTMx
MTc2ZjYzODVlYmUzNGNjYjMxYTUwNWMxOTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKQEAgLTI2OSw4ICsyNjksOCBAQCBieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmNwcAogYnl0
ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNl
LmNwcAogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAotYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKLWJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAorYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
CitieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNw
cAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFu
ZFN0YXR1cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAppbmRleCBmYThiNmIyMmUzYTRlMmRjOTUwYzdiYjI0Njk3ZTY5ODI4MGMzNWI2Li4yY2Nk
MzU2MzgzMDQ5ZDc4ZmMyNjliZjA1NWIyYzIxMTZlNDdjYmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC05OSw2ICs5OSwxOSBAQCBSZWY8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSB0eXBlLCBDYWNoZQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXByb3RvdHlwZUFjY2Vzc0NoYWluKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKQEAgLTI3Miw2ICsyODUsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpndWFy
ZGVkQnlTdHJ1Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2soKSBjb25z
dAogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDYgKzM1MiwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6OnJlcXVpcmVzSWRlbnRpZmllck5hbWVNYXRjaCgpIGNvbnN0CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzgsNiArNDE3LDE5IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJbnQzMlByb3BlcnR5Q2hlY2soKSBjb25zdAogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENs
YW1wZWRTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRTdG9yZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjUsMTEgKzQ3NywyNCBAQCBib29s
IEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUigpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNh
c2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTUxNSw2ICs1ODAsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpmb3JF
YWNoRGVwZW5kZW50Q2VsbChWTSYgdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNh
c2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBicmVhazsKICAgICB9CiB9CkBA
IC01NjksNiArNjQ3LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZNJiB2bSwgVmVj
dG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFya0lmRG9lc0NhbGxzKSBjb25zCiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZElu
dDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
Q29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50
MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICBkb2VzQ2FsbHMgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBSZXBsYWNlOgpAQCAtNjUwLDYgKzc0MSwxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgpID09IHR5cGUo
KTsKIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogewpAQCAtOTYxLDYgKzEwNjUsOCBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0
dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHVi
SW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hH
UFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsxMTY2LDggQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC0x
MTQ1LDYgKzEyNTMsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlm
IChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTExOTksMTUgKzEzMDksMTQgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgaXNPdXRPZkJvdW5kczsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlz
RW1wdHk7Ci0KICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgICAgIGFs
bG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9h
cnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5s
b2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTIyNywxNiArMTMz
NiwxNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAg
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcyA9IGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAg
ICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNoR1BS
KSk7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3Jh
dGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKTsKICNlbHNlCiAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVy
czo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBKU1ZhbHVlUmVncyhzY3JhdGNo
M0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVt
cHR5KHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKSk7CiAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNo
R1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjYyLDIxICsxMzcxLDIx
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAg
ICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIGppdC56
ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgICAg
IGlmIChtX3R5cGUgPT0gSW5kZXhlZERvdWJsZUxvYWQpIHsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICAg
ICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0
Y2hGUFIpOworICAgICAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5hTihzdGF0ZS5zY3JhdGNoRlBSKSk7CiAgICAgICAgICAgICAgICAgaml0LmJveERvdWJsZShz
dGF0ZS5zY3JhdGNoRlBSLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgICAgICBpc0VtcHR5
ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaEdQUikpOwogICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vs
c2UKICAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCBKU1Zh
bHVlUmVncyhzY3JhdGNoM0dQUiwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1w
dHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAgZmFp
bEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAg
ICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoM0dQUiwgdmFsdWVSZWdzLnRhZ0dQUigp
KTsKICNlbmRpZgpAQCAtMTI4NiwxNiArMTM5NSwyNzMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
IAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpICYmICFmYWlsQW5kSWdub3JlLmVtcHR5
KCkpIHsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKyAgICAgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVk
U3RhdGUpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBl
bmQoZmFpbEFuZElnbm9yZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIElu
ZGV4ZWRJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9y
ZTogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNl
IG9yIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5w
cm9wZXJ0eUdQUjsKKworICAgICAgICAvLyBpbnQzMiBjaGVjayBkb25lIGluIHBvbHltb3JwaGlj
IGFjY2Vzcy4KKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENvcHlPbldyaXRl
KSkpOworICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IGlzT3V0T2ZCb3VuZHM7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8uYmFzZVJlZ3MoKSk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKKyAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAo
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKKyAgICAgICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgICAgIGF1dG8gcHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnMgPSBbJl0geworICAgICAgICAgICAgcHJlc2VydmVkU3RhdGUgPSBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0b3JlUmVzdWx0OworICAgICAgICBpZiAobV90
eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKworICAg
ICAgICAgICAgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQo
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVy
dHlHUFIsIHNjcmF0Y2gyR1BSKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBp
c091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6WmVybywg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVs
cGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpKTsKKyNlbHNl
CisgICAgICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIEpTVmFsdWU6Om9mZnNldE9mVGFnKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworI2VuZGlmCisKKyAgICAgICAgICAgIHN0b3JlUmVz
dWx0ID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3Ms
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlOworICAg
ICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IEludDMyU2hhcGU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToK
KyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gRG91YmxlU2hhcGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihleHBlY3RlZFNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lz
dGVycygpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBpc091dE9mQm91bmRzLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgc3Rv
cmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZTogeworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAg
ICAgICAgICAgYXV0byBub3RJbnQgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOwor
ICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWR5ID0g
aml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3RJbnQubGluaygmaml0KTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3RlciwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDJHUFIpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMkdQUiwgc3RhdGUuc2NyYXRjaEZQUik7
CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0
YXRlLnNjcmF0Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmUsIHZhbHVlUmVncy50YWdHUFIo
KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlSW50c1RvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICByZWFkeS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEluZGV4
ZWRJbnQzMlN0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJv
cGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAg
ICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNo
MkdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpU
aW1lc0VpZ2h0KSk7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVCYXJyaWVyIG11c3QgYmUgZW1p
dHRlZCBpbiB0aGUgZW1iZWRkZXIgc2lkZS4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwg
cHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYg
KG1fdHlwZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKICAgICAgICAgICAgIGlzT3V0
T2ZCb3VuZHMubGluaygmaml0KTsKLSAgICAgICAgICAgIGlzRW1wdHkubGluaygmaml0KTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwor
ICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDJHUFIpOworICAgICAg
ICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQu
c3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyR1BSKTsKKyAgICAg
ICAgICAgIGppdC5qdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMubGluaygmaml0KTsKKyAgICAgICAgICAg
IGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZN
YXlTdG9yZVRvSG9sZSgpKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZqaXQpOworCisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHko
KSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7CiAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVu
ZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIC8vIFRoaXMg
Y29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhl
IGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorCisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0
b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7CisKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKKworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih0eXBlRm9y
VHlwZWRBcnJheVR5cGUodHlwZSkpKSk7CisKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIo
dmFsdWVSZWdzKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQo
dHlwZSkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJ
bnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgIGF1dG8gZG91YmxlQ2FzZSA9IGppdC5icmFuY2hJ
Zk5vdEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3Vi
bGUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAg
ICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UubGluaygm
aml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsK
KyAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9E
b3VibGUoc2NyYXRjaEdQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisjZWxzZQorICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJv
dmUsIHZhbHVlUmVncy50YWdHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyNlbmRpZgorICAgICAgICAgICAgcmVhZHkubGluaygmaml0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIC8vIE91dE9m
Qm91bmRzIGJpdCBvZiBBcnJheVByb2ZpbGUgd2lsbCBiZSBzZXQgaW4gdGhlIG9wZXJhdGlvbiBm
dW5jdGlvbi4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpKTsK
KworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVz
ZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygp
KTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9z
dHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJv
ZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1
YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNo
R1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKQorICAgICAgICAgICAgc2NyYXRjaDNHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygKKyAgICAgICAgICAgIGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisKKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOworICAgICAgICBqaXQuY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBzY3JhdGNoMkdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgZmFsc2UpOworCisgICAgICAgIGppdC5zaWduRXh0ZW5k
MzJUb1B0cihwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChpc0ludCh0eXBl
KSkgeworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IUpTQzo6aXNTaWduZWQodHlwZSkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGluQm91
bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZikpOworICAgICAgICAgICAgICAgIGF1
dG8gdG9vQmlnID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW4sIHNjcmF0
Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAg
ICAgaml0LnhvcjMyKHNjcmF0Y2gzR1BSLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAgICAg
YXV0byBjbGFtcGVkID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICB0b29CaWcubGluaygm
aml0KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigweGZmKSwgc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgICAgIGNsYW1wZWQubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICBpbkJvdW5kcy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTgoc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gy
R1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTgodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUxNih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc1R3bykpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRm91cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKGlzT3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaXNFbXB0eSk7CisgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5zY3JhdGNoRlBSICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAg
ICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9h
dChzdGF0ZS5zY3JhdGNoRlBSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVGbG9hdChzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShzdGF0ZS5zY3JhdGNoRlBSLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHBy
ZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xMzIyLDYgKzE2ODgsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3Mo
KSk7CiAgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
CiAgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTg5
NCw4ICsyMjYyLDEyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLmJhc2VSZWdzKCkpOwogICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwor
ICAgICAgICBpZiAoc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpCisgICAgICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7CkBA
IC0yMDU4LDYgKzI0MzAsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsK
ICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAg
ICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2lu
ZDo6UHJvcGVydHlEZWxldGlvbik7CkBAIC0yMTgzLDYgKzI1NTcsMTkgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9h
ZDoKICAgICBjYXNlIENoZWNrUHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGln
dW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlOgogICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJh
dGVXaXRoR3VhcmQoKSwgc2luY2UgdGhlIGd1YXJkIGlzIHBhcnQgb2YgdGhlCiAgICAgICAgIC8v
IGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRl
KCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNpbmNlIHRoZXkKICAgICAgICAgLy8gYXJlIG5vdCBndWFy
ZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3MuCkBAIC0yMTk2LDIyICsyNTgzLDMxIEBAIFR5cGVkQXJy
YXlUeXBlIEFjY2Vzc0Nhc2U6OnRvVHlwZWRBcnJheVR5cGUoQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOgogICAgICAg
ICByZXR1cm4gVHlwZUludDg7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDoK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKICAgICAgICAgcmV0dXJuIFR5
cGVVaW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDoKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlSW50MTY7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQx
NjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUludDMyOwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9h
dDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjg0LDYgKzI2ODAsMTkgQEAgYm9v
bCBBY2Nlc3NDYXNlOjpjYW5CZVNoYXJlZChjb25zdCBBY2Nlc3NDYXNlJiBsaHMsIGNvbnN0IEFj
Y2Vzc0Nhc2UmIHJocykKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUZsb2F0NjRMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgog
ICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuaAppbmRleCA0MTljOTljOTBmNDM5MDE4MDFkNGE5NjIxMTA1MDg5OWJhZGZkOWJl
Li41NjNhMTU1MmFlNDIxNjQ0MDQ2ZDBhYTQxZDIzYjZhZGQ1ZGI2NTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKQEAgLTEyOCw3ICsxMjgsMjAgQEAg
Y2xhc3MgQWNjZXNzQ2FzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NDYXNl
PiB7CiAgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZCwKICAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDMyTG9hZCwKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZCwKLSAgICAgICAgSW5kZXhlZFN0cmluZ0xvYWQKKyAgICAgICAgSW5kZXhlZFN0cmluZ0xv
YWQsCisgICAgICAgIEluZGV4ZWRJbnQzMlN0b3JlLAorICAgICAgICBJbmRleGVkRG91YmxlU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRDb250aWd1b3VzU3RvcmUsCisgICAgICAgIEluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUsCisgICAg
ICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3Jl
LAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlLAorICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSwKICAgICB9OwogCiAgICAgZW51bSBTdGF0ZSA6IHVp
bnQ4X3QgewpAQCAtMzUzLDEyICszNjYsMTMgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAg
ICAgICAgIHN0cnVjdCBLZXkgewogICAgICAgICAgICAgS2V5KCkgPSBkZWZhdWx0OwogCi0gICAg
ICAgICAgICBLZXkoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJh
R1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIFBvbHlt
b3JwaGljQWNjZXNzSklUU3R1YlJvdXRpbmUqIHdyYXBwZWQpCisgICAgICAgICAgICBLZXkoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIGV4dHJhR1BSLCBHUFJSZWcgc3R1
YkluZm9HUFIsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMsIFBvbHltb3JwaGljQWNjZXNzSklUU3R1YlJvdXRpbmUqIHdyYXBwZWQpCiAgICAgICAgICAg
ICAgICAgOiBtX3dyYXBwZWQod3JhcHBlZCkKICAgICAgICAgICAgICAgICAsIG1fYmFzZUdQUihi
YXNlR1BSKQogICAgICAgICAgICAgICAgICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKICAgICAgICAg
ICAgICAgICAsIG1fZXh0cmFHUFIoZXh0cmFHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3N0dWJJ
bmZvR1BSKHN0dWJJbmZvR1BSKQorICAgICAgICAgICAgICAgICwgbV9hcnJheVByb2ZpbGVHUFIo
YXJyYXlQcm9maWxlR1BSKQogICAgICAgICAgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRS
ZWdpc3RlcnMpCiAgICAgICAgICAgICB7IH0KIApAQCAtMzc1LDYgKzM4OSw3IEBAIGNsYXNzIFNo
YXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0g
Yi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAgICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1f
ZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9z
dHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAgICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09
IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdp
c3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICB9CiAKQEAgLTM4Myw2ICsz
OTgsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgICAgIEdQUlJlZyBtX3Zh
bHVlR1BSOwogICAgICAgICAgICAgR1BSUmVnIG1fZXh0cmFHUFI7CiAgICAgICAgICAgICBHUFJS
ZWcgbV9zdHViSW5mb0dQUjsKKyAgICAgICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsK
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgfTsKIApA
QCAtNDE2LDYgKzQzMiw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAg
ICAgICAgICAmJiBhLm1fdmFsdWVHUFIgPT0gYi5tX3ZhbHVlR1BSCiAgICAgICAgICAgICAgICAg
ICAgICYmIGEubV9leHRyYUdQUiA9PSBiLm1fZXh0cmFHUFIKICAgICAgICAgICAgICAgICAgICAg
JiYgYS5tX3N0dWJJbmZvR1BSID09IGIubV9zdHViSW5mb0dQUgorICAgICAgICAgICAgICAgICAg
ICAmJiBhLm1fYXJyYXlQcm9maWxlR1BSID09IGIubV9hcnJheVByb2ZpbGVHUFIKICAgICAgICAg
ICAgICAgICAgICAgJiYgYS5tX3VzZWRSZWdpc3RlcnMgPT0gYi5tX3VzZWRSZWdpc3RlcnMpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBvcmRlcmluZyBvZiBjYXNlcyBkb2Vz
IG5vdCBtYXR0ZXIgZm9yIHNoYXJpbmcgY2FwYWJpbGl0aWVzLgogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4gcG90ZW50aWFsbHkgaW5jcmVhc2Ugc3VjY2VzcyByYXRlIGJ5IG1ha2luZyB0
aGlzIGNvbXBhcmlzb24gLyBoYXNoaW5nIG5vbiBvcmRlcmluZyBzZW5zaXRpdmUuCkBAIC00NDUs
NiArNDYyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgIEdQUlJlZyBtX3Zh
bHVlR1BSOwogICAgICAgICBHUFJSZWcgbV9leHRyYUdQUjsKICAgICAgICAgR1BSUmVnIG1fc3R1
YkluZm9HUFI7CisgICAgICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUjsKICAgICAgICAgUmVn
aXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxSZWZQ
dHI8QWNjZXNzQ2FzZT4+JiBtX2Nhc2VzOwogICAgICAgICBjb25zdCBGaXhlZFZlY3RvcjxTdHJ1
Y3R1cmVJRD4mIG1fd2Vha1N0cnVjdHVyZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgKaW5kZXggNmRjN2IwZTU0NDdmZTA2MGRiY2JkMjRkOTkwOTc1
NjU3OWZjNjU3NC4uOTFkYThmM2VmZjkyZmMzYTg5NTcwZDc1YTRiOTEzYmQyNjMyY2M0YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaApAQCAtMjA4
LDYgKzIwOCw5IEBAIGNsYXNzIEFycmF5UHJvZmlsZSB7CiAgICAgQXJyYXlNb2RlcyogYWRkcmVz
c09mQXJyYXlNb2RlcygpIHsgcmV0dXJuICZtX29ic2VydmVkQXJyYXlNb2RlczsgfQogICAgIGJv
b2wqIGFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gJm1fbWF5U3RvcmVUb0hvbGU7
IH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXlTdG9yZVRvSG9sZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbWF5U3RvcmVUb0hvbGUpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlQcm9maWxlLCBtX2xhc3RTZWVuU3RydWN0dXJlSUQpOyB9
CisKICAgICB2b2lkIHNldE91dE9mQm91bmRzKCkgeyBtX291dE9mQm91bmRzID0gdHJ1ZTsgfQog
ICAgIGJvb2wqIGFkZHJlc3NPZk91dE9mQm91bmRzKCkgeyByZXR1cm4gJm1fb3V0T2ZCb3VuZHM7
IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAppbmRleCA3NjcxZDg3YjFlYTc0OWRjMzQ1NmY3NzY1
YWMwNmM0YThiY2ZiMmIxLi5jMDI1YTdiZjY1MTk0YmRhNGU4MjE1MWQ5Y2IzZjI5Njc4ZGE5Mjc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRl
clNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0xNDEsNiArMTQxLDggQEAgdm9pZCBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3Rh
dGUsIGNvbnMKICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwogICAgIGlmIChzdHViSW5m
by5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmls
ZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5t
X2FycmF5UHJvZmlsZUdQUik7CiAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAKICAg
ICBHUFJSZWcgcGFyYW1CYXNlR1BSID0gSW52YWxpZEdQUlJlZzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgKaW5kZXggZmEwYTZkNTIzYjdhZDBkZjg4MjEx
MDdmZTNiODQ5MTdjNDgzZDk1MC4uN2EwNThjM2QwMjU5NmJmNmVhOGZmOWE4YTcyYjRkYzJhMWQx
ODkyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVz
TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFwLmgK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXM7CiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBHZXRCeVN0YXR1czsKIGNsYXNzIEluQnlTdGF0dXM7Ci1jbGFzcyBQdXRCeUlkU3Rh
dHVzOworY2xhc3MgUHV0QnlTdGF0dXM7CiBjbGFzcyBEZWxldGVCeVN0YXR1czsKIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOwogc3RydWN0IEJ5VmFsSW5mbzsKQEAgLTQ4LDcgKzQ4LDcgQEAgc3Ry
dWN0IElDU3RhdHVzIHsKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbFN0YXR1cyB7IG51bGxwdHIg
fTsKICAgICBHZXRCeVN0YXR1cyogZ2V0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEluQnlTdGF0
dXMqIGluU3RhdHVzIHsgbnVsbHB0ciB9OwotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dFN0YXR1cyB7
IG51bGxwdHIgfTsKKyAgICBQdXRCeVN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OwogICAg
IERlbGV0ZUJ5U3RhdHVzKiBkZWxldGVTdGF0dXMgeyBudWxscHRyIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCmluZGV4IDQ4NDEw
MTM5ZGMyZjhjMGQ1YzgwYTJmZjkwNWMzYWE2YTEzNWRmYjIuLmMxZWIyZDY5ZDI3NTRlMDUxYTgy
NTlmNjM3N2U2NDcxNGVlYWVlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCkBAIC0yMTYsOCArMjE2LDEyIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIEdQUlJlZyBnZXRTY3JhdGNoUmVnaXN0ZXIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VUYWdHUFIpOwogICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLnZhbHVlVGFnR1BSKTsKICNlbmRpZgorICAgIGlmIChzdHViSW5m
by5wcm9wZXJ0eVJlZ3MoKSkKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVy
dHlSZWdzKCkpOwogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAg
IGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgR1BSUmVn
IHNjcmF0Y2ggPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgaWYgKGFsbG9j
YXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCmluZGV4IDgxMDRhMmYzMWQ5MTMxMGMzZDM4ZTMzYWRkMWZmZTY2Mjc1ZDkxMTQuLjQw
ZDZhMWY5ZGE1ODI1MjA1NTRhYWMzNGVjMWE0NGU0MjlhZjg2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtNDk0
LDYgKzQ5NCw4IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJl
Z2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9jCiAjZW5kaWYKICAgICBpZiAoc3R1
YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBpZiAoc3R1YkluZm8ubV9hcnJheVBy
b2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8ubV9hcnJheVByb2ZpbGVHUFIpOwogCiAgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtODEwLDYgKzgxMiw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpTTG9jCiAgICAgICAgICAgICBzdHViSW5mby52YWx1ZUdQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwKICAgICAgICAgICAgIHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsCisgICAgICAgICAgICBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwKICAgICAgICAgICAg
IHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICBrZXlzLAogICAgICAgICAgICAg
d2Vha1N0cnVjdHVyZXMsCkBAIC04NDYsNyArODQ5LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2MKIAogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CiAgICAgICAgIGlmIChjYW5C
ZVNoYXJlZCkKLSAgICAgICAgICAgIHZtLm1fc2hhcmVkSklUU3R1YnMtPmFkZChTaGFyZWRKSVRT
dHViU2V0OjpIYXNoOjpLZXkoc3R1YkluZm8uYmFzZUdQUiwgc3R1YkluZm8udmFsdWVHUFIsIHN0
dWJJbmZvLnJlZ3MudGhpc0dQUiwgc3R1YkluZm8ubV9zdHViSW5mb0dQUiwgc3R1YkluZm8udXNl
ZFJlZ2lzdGVycywgc3R1Yi5nZXQoKSkpOworICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRTdHVi
cy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBzdHVi
SW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgc3R1YkluZm8udXNlZFJlZ2lzdGVycywg
c3R1Yi5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBmaW5pc2hDb2RlR2VuZXJhdGlvbihX
VEZNb3ZlKHN0dWIpKTsKQEAgLTEwMjIsNiArMTAyNSw0NSBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ6CiAgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFN0cmluZ0xvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5k
ZXhlZEludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyU3RvcmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3Jl
OgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWREb3VibGVTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAg
ICBvdXQucHJpbnQoIkluZGV4ZWRDb250aWd1b3VzU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJ
bnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZToKKyAg
ICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZSIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZmFiOWQzOWM3YTRlYTZlNjFjZjU2NDhhZWZh
YzkwYzFmN2MyZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKLSNpbmNsdWRlICJD
b2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCi0jaW5jbHVkZSAiR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQotewotICAgIHJldHVybiBhcHBlbmRJQ1N0
YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6c2hyaW5rVG9GaXQoKQotewotICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQotewotICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7Ci0gICAgCi0g
ICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotCi0gICAgLy8gV2UgYXJlIG5vdCB5ZXQgdXNpbmcgYGNv
bXB1dGVGcm9tTExJbnRgIGluIGFueSBwbGFjZSBmb3IgYHB1dF9wcml2YXRlX25hbWVgLgotICAg
IC8vIFdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1
cmUgY2hhbmdlcywgc2luY2Ugd2UgaGF2ZQotICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlz
IG9wZXJhdGlvbiBvbiBMTEludC4KLSAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcFB1dFBy
aXZhdGVOYW1lPigpKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmls
ZWRCbG9jayk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xk
U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFzdHJ1Y3R1cmVJRCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwotCi0gICAgU3Ry
dWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwotICAg
IGlmICghbmV3U3RydWN0dXJlSUQpIHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgIAot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShieXRl
Y29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkpKSB7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAg
ICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCi0gICAgICAgICAgICAgICAgdm0sIHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBz
dHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgIHN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci19Ci0KLSNpZiBFTkFC
TEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlu
a1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgIAotICAgIFVOVVNF
RF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHVpZCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGRp
ZEV4aXQpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAg
IAotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSkuc3R1YkluZm87Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21w
dXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8s
IHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8vIEVOQUJMRShKSVQpCi0gICAgVU5VU0VE
X1BBUkFNKG1hcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOwotICAgIFVOVVNFRF9QQVJB
TShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBy
ZXR1cm4gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ss
IHN0dWJJbmZvLCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Ci19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAotICAgIGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCi17Ci0gICAgU3R1
YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxl
ZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7Ci0gICAgaWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkp
Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHN1bW1hcnkpOwotICAgIAotICAgIHN3aXRj
aCAoc3R1YkluZm8tPmNhY2hlVHlwZSgpKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0Ogot
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWls
ZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5
SWRSZXBsYWNlOiB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAg
ICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7Ci0gICAgICAgIAotICAg
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1w
bGU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3Qt
PmF0KGkpOwotICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAg
ICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpSZXBsYWNlOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRp
b246IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwot
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsK
LSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQg
PSBhY2Nlc3MuY29uZGl0aW9uU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21w
bGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQo
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxl
eEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAq
Y2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNh
bGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRl
cigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5v
ZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKLSAgICAgICAgICAgICAgICB9IH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6Ci0gICAgICAg
ICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgIH0KLX0KLQotUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4
dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17
Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCk7Ci0gICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
ID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0
ZWNvZGVJbmRleCk7Ci0gICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUo
YmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7Ci0KLSAgICBmb3IgKElDU3RhdHVzQ29udGV4
dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewotICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBj
b250ZXh0LT5nZXQoY29kZU9yaWdpbik7Ci0gICAgICAgIAotICAgICAgICBhdXRvIGJsZXNzID0g
WyZdIChjb25zdCBQdXRCeUlkU3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5SWRTdGF0dXMgewotICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsKLSAgICAgICAg
ICAgICAgICBQdXRCeUlkU3RhdHVzIGJhc2VsaW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKLSAgICAg
ICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgs
IHVpZCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQotICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQuc2xvd1ZlcnNpb24oKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7Ci0gICAgICAg
ICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCi0g
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBz
dGF0dXMuc3R1YkluZm8sIHVpZCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJs
ZXNzKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMucHV0
U3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMucHV0U3RhdHVzKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVN
YXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Ci19Ci0K
LVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRL
aW5kKQotewotICAgIGlmIChwYXJzZUluZGV4KCp1aWQpKQotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmIChzZXQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwotICAgIAotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9zdGF0ZSA9
IFNpbXBsZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2
YWxpZCBvZmZzZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5l
IG1vZGUKLSAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEg
cHJpdmF0ZSBmaWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCi0gICAgICAgICAg
ICAvLyBzbG93IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgotICAgICAgICAgICAgaWYgKHByaXZh
dGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwotCi0gICAgICAgICAgICBpZiAoYXR0
cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBs
YWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBj
cmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgotICAgICAg
ICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhl
Y3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKLSAgICAgICAgICAgICAgICAvLyBnb2lu
ZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBm
cm9tIHRoZSBjb25jdXJyZW50Ci0gICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZl
biBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5n
eS4KLSAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRh
a2Ugc2xvdyBwYXRoLgotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2
YXJpYW50ID0KLSAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1
cmUsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4g
aGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4gc2V0IG1vZGUgYW5kIGl0Ci0g
ICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGJlY2F1
c2UgaXQgbWVhbnMgd2UgYXJlCi0gICAgICAgIC8vIHRyeWluZyB0byBzdG9yZSBpbiBhIG5vdCBp
bnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtlCi0gICAgICAgIC8vIHNsb3cg
cGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRzIGV4ZWN1dGVkLgotICAgICAg
ICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMg
aXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRo
aXMgaXMgcmVhbGx5Ci0gICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkg
Y2hlY2tzLgotICAgIAotICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24g
ZGljdGlvbmFyaWVzLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAg
IC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3Qg
YW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCi0gICAgICAgIC8vIHdlIGRvbid0IHdhbnQg
dG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpKTsKLSAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJl
bnRseSgKLSAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7
Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIH0KLSAgICAK
LSAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0
dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPQotICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZz
ZXQpOwotICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgCi0gICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlh
bnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7Ci0gICAg
ICAgIGlmICghZGlkQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjptYWtlc0Nh
bGxzKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBNYWtlc0NhbGxzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUo
KTsgaS0tOykgewotICAgICAgICBpZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhtYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNT
bG93UGF0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRT
dGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChQdXRCeUlk
VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCi0gICAgICAgIHZhcmlhbnQubWFya0lmQ2hl
YXAodmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQdXRCeUlkU3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1ib29sIFB1dEJ5SWRTdGF0dXM6OmZpbmFsaXpl
KFZNJiB2bSkKLXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50
cykgewotICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkU3Rh
dHVzOjptZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJiBvdGhlcikKLXsKLSAgICBpZiAob3RoZXIu
bV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0
byBtZXJnZVNsb3cgPSBbJl0gKCkgewotICAgICAgICAqdGhpcyA9IFB1dEJ5SWRTdGF0dXMoKG1h
a2VzQ2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOwotICAgIH07Ci0gICAgCi0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBO
b0luZm9ybWF0aW9uOgotICAgICAgICAqdGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBpZiAob3RoZXIubV9zdGF0ZSAhPSBT
aW1wbGUpCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsK
LSAgICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICB9Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgIGNh
c2UgTWFrZXNDYWxsczoKLSAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgIH0KLSAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0
dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKLXsKLSAgICBpZiAobV9zdGF0ZSAh
PSBTaW1wbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1f
dmFyaWFudHMsIHNldCk7Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCi0gICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5
KCk7Ci0gICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0YXRlID0gTm9J
bmZvcm1hdGlvbjsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBOb0luZm9ybWF0
aW9uOgotICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0aW9uKSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBvdXQucHJpbnQoIigiLCBs
aXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBjYXNlIFRha2VzU2xvd1BhdGg6Ci0gICAgICAgIG91dC5wcmludCgiKFRha2VzU2xvd1BhdGgp
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1ha2VzQ2FsbHM6Ci0gICAgICAgIG91dC5w
cmludCgiKE1ha2VzQ2FsbHMpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhlMjUyZGI2OWFjNTcxM2RjOGU4ZjhiNjQ0MDAw
Y2FlNjMwYjFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0
dXMuaCIKLSNpbmNsdWRlICJFeGl0RmxhZy5oIgotI2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCi0j
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCi0jaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBWTTsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3Mg
U3RydWN0dXJlOwotY2xhc3MgU3RydWN0dXJlQ2hhaW47Ci1jbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29k
ZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7Ci0KLWNsYXNzIFB1dEJ5SWRTdGF0
dXMgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVu
dW0gU3RhdGUgewotICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3Jt
YXRpb24uCi0gICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFz
IGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KLSAgICAgICAgU2ltcGxlLAotICAgICAgICAv
LyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgotICAgICAgICBUYWtlc1Nsb3dQ
YXRoLAotICAgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxz
LgotICAgICAgICBNYWtlc0NhbGxzCi0gICAgfTsKLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKCkK
LSAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQotICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8
IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHMpOwotICAg
IH0KLSAgICAKLSAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1t
YXJ5KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdW1tYXJ5KSB7Ci0gICAgICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpOb0luZm9ybWF0aW9uOgotICAgICAgICAgICAgbV9zdGF0ZSA9IE5vSW5m
b3JtYXRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1t
YXJ5OjpTaW1wbGU6Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAg
ICAgICAgICBtX3N0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLSAg
ICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKLSAgICB7Ci0gICAgICAgIG1fdmFyaWFudHMuYXBwZW5k
KHZhcmlhbnQpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2
YXRlRmllbGRQdXRLaW5kKTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJ
Q1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0
dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSNlbmRpZgotICAgIAotICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQotICAgIGJvb2wgdGFrZXNTbG93
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRl
ID09IE1ha2VzQ2FsbHM7IH0KLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKLSAgICBQdXRC
eUlkU3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IG51bVZhcmlh
bnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHM7IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9y
Jik7Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQgbWVyZ2UoY29uc3Qg
UHV0QnlJZFN0YXR1cyYpOwotICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJp
dmF0ZToKLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAotICAgICAgICBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSNlbmRpZgotICAgIHN0YXRpYyBQdXRCeUlk
U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgCi0gICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1
dEJ5SWRWYXJpYW50Jik7Ci0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgIAotICAgIFN0YXRl
IG1fc3RhdGU7Ci0gICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1
NGQ2NDc4MmE5NjQzOTMwOWFlOWExZmEwNDhhMzg3MjU1MjFmMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLQotI2luY2x1ZGUgIkNh
bGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiSGVhcElubGluZXMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLVB1dEJ5SWRWYXJpYW50OjpQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFu
dCYgb3RoZXIpCi0gICAgOiBQdXRCeUlkVmFyaWFudCgpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsK
LX0KLQotUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgUHV0
QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAgIG1fa2luZCA9IG90aGVyLm1fa2luZDsKLSAgICBt
X29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xkU3RydWN0dXJlOwotICAgIG1fbmV3U3RydWN0dXJl
ID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Ci0gICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2Nv
bmRpdGlvblNldDsKLSAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwotICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1
ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5
SWRWYXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKLSAgICByZXN1
bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwotICAgIHJl
c3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9uZXdTdHJ1
Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQotewotICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOwotICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5t
X2NhbGxMaW5rU3RhdHVzID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU3RydWN0dXJlKiBQdXRCeUlkVmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6Zml4VHJhbnNpdGlvblRvUmVw
bGFjZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXpl
KCkgPD0gMik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICBt
X2tpbmQgPSBSZXBsYWNlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Ci19Ci0K
LWJvb2wgUHV0QnlJZFZhcmlhbnQ6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAotewotICAgIHN3
aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgIGNhc2UgU2V0dGVyOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBj
b25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
ICAgICByZXR1cm4gb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGNhc2UgU2V0
dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjptYWtlc0NhbGxzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKLX0KLQotYm9vbCBQdXRCeUlkVmFy
aWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotewotICAg
IGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE5vdFNldDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAg
ICAgICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5tX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShv
dGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgbmV3VmFyaWFudCA9IG90aGVyOwotICAgICAgICAgICAgaWYgKG5ld1Zh
cmlhbnQuYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7Ci0gICAg
ICAgICAgICAgICAgKnRoaXMgPSBuZXdWYXJpYW50OwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6Ci0gICAg
ICAgICAgICByZXR1cm4gYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIp
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVHJhbnNpdGlvbjogewotICAgICAgICAgICAg
aWYgKG1fb2xkU3RydWN0dXJlICE9IG90aGVyLm1fb2xkU3RydWN0dXJlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbmV3U3Ry
dWN0dXJlICE9IG90aGVyLm1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRp
dGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0
ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgIGlm
IChvdGhlci5tX2tpbmQgIT0gU2V0dGVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0
YXR1cykgewotICAgICAgICAgICAgaWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2Nh
bGxMaW5rU3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIu
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9u
U2V0OwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5t
X2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1Zh
bGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbmRp
dGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2Nh
bGxMaW5rU3RhdHVzKQotICAgICAgICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICAKLSAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVy
Z2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0K
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0
aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2UpCi17Ci0gICAgQVNTRVJUKG1f
a2luZCA9PSBUcmFuc2l0aW9uKTsKLSAgICBBU1NFUlQocmVwbGFjZS5tX2tpbmQgPT0gUmVwbGFj
ZSk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZzZXQpOwotICAgIEFTU0VS
VCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOwotICAgIEFTU0VSVCghcmVwbGFjZS5yZWFs
bG9jYXRlc1N0b3JhZ2UoKSk7Ci0gICAgQVNTRVJUKHJlcGxhY2UuY29uZGl0aW9uU2V0KCkuaXNF
bXB0eSgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2luZyBvbmx5IHdvcmtzIHdo
ZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBuZXcgZmllbGQgd2hpY2gK
LSAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0aGUgb3RoZXIgcGF0aCB3
YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Ci0gICAgLy8gd29yayBpZiB3
ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJlcGxhY2UgcGF0aCBpcyBw
b2x5bW9ycGhpYy4KLSAgICAKLSAgICBpZiAocmVhbGxvY2F0ZXNTdG9yYWdlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAocmVwbGFjZS5tX29sZFN0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVyZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFB1dEJ5SWRWYXJp
YW50OjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1fb2xkU3RydWN0dXJl
Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAgIGlmIChtX25ld1N0cnVjdHVyZSkKLSAgICAgICAg
bV9uZXdTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lk
IFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1w
bGF0ZSB2b2lkIFB1dEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYpOwotCi1i
b29sIFB1dEJ5SWRWYXJpYW50OjpmaW5hbGl6ZShWTSYgdm0pCi17Ci0gICAgaWYgKCFtX29sZFN0
cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fbmV3U3RydWN0dXJlICYmICF2bS5oZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZl
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYm
ICFtX2NhbGxMaW5rU3RhdHVzLT5maW5hbGl6ZSh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotewotICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKLX0K
LQotdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAg
IGNhc2UgTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAgIG91dC5wcmludCgKLSAg
ICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
Iiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBvdXQucHJpbnQoCi0gICAgICAg
ICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIgdG8gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQs
IGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsICI+Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIG91dC5wcmludCgK
LSAgICAgICAgICAgICI8U2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQp
LCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCks
ICJdIik7Ci0gICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7Ci0gICAg
ICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwotICAgICAgICBv
dXQucHJpbnQoIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YTczYTJmOGQ0YjVlNWYwYTFkZTQwOGE1ZmJiZDFjYjdh
YjI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua1N0YXR1czsK
LQotY2xhc3MgUHV0QnlJZFZhcmlhbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIGVudW0gS2luZCB7Ci0gICAgICAgIE5vdFNldCwKLSAgICAgICAgUmVwbGFj
ZSwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgU2V0dGVyCi0gICAgfTsKLSAgICAKLSAg
ICBQdXRCeUlkVmFyaWFudCgpCi0gICAgICAgIDogbV9raW5kKE5vdFNldCkKLSAgICAgICAgLCBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFy
aWFudCYpOwotICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlh
bnQmKTsKLQotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVy
ZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQg
dHJhbnNpdGlvbigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlh
bnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLAotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+KTsKLSAgICAKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ICE9IE5vdFNldDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRl
cik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9
PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAot
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0
JiBvbGRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0
aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKLSAgICB9
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3Ry
dWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5l
Y2Vzc2FyeSgpOwotCi0gICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7Ci0gICAgYm9v
bCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKLSAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25z
dDsKLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNldHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlm
IHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgSW50
cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0dXJuIE5vSW50cmluc2ljOyB9Ci0KLSAgICAv
LyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVkIGhlbHBlcnMuCi0gICAgYm9vbCBpc1Byb3Bl
cnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICBDYWxsTGlua1N0YXR1cyogY2FsbExp
bmtTdGF0dXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIp
OwotICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsKLSAgICB9Ci0KLSAgICBi
b29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
Ci0gICAgYm9vbCBmaW5hbGl6ZShWTSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhl
ci5zdHJ1Y3R1cmVTZXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgYXR0ZW1wdFRv
TWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHJlcGxhY2Up
OwotICAgIAotICAgIEtpbmQgbV9raW5kOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owot
ICAgIFN0cnVjdHVyZVNldCBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3Ry
dWN0dXJlIHsgbnVsbHB0ciB9OwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlu
a1N0YXR1czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE1YjA5YzhhNWU5MTNk
NzdlZGViNzNlNmYxZDYyNWZjMmRmMmU4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKQEAgLTAsMCArMSw1NDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKKworI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBsZXhH
ZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVk
ZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIFB1
dEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKK3sK
KyAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwor
fQorCit2b2lkIFB1dEJ5U3RhdHVzOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV92YXJpYW50cy5z
aHJpbmtUb0ZpdCgpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21M
TEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkKK3sKKyAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOworICAgIAorICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6
CisgICAgICAgIC8vIFdlIGRvIG5vIGhhdmUgYSBjb2RlIHJldHJpZXZpbmcgTExJbnQgaW5mb3Jt
YXRpb24gZm9yIGBvcF9wdXRfcHJpdmF0ZV9uYW1lYC4KKyAgICAgICAgLy8gV2UgY2FuIGFkZCBz
dXBwb3J0IGZvciBpdCBpZiB0aGlzIGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5j
ZSB3ZSBoYXZlCisgICAgICAgIC8vIElDIGltcGxlbWVudGVkIGZvciB0aGlzIG9wZXJhdGlvbiBv
biBMTEludC4KKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEocHJvZmlsZWRCbG9jayk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllciA9ICYo
cHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwoKTsKKworICAgIFN0cnVjdHVy
ZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIXN0
cnVjdHVyZUlEKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7Cisg
ICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQoc3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOworICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIAorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKKyAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCkp
KSB7CisgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0s
IHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFB1dEJ5VmFyaWFu
dDo6dHJhbnNpdGlvbihudWxscHRyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1B1dEJ5U3RhdHVzOjpQdXRCeVN0
YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIHN3aXRjaCAoc3VtbWFyeSkgeworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpO
b0luZm9ybWF0aW9uOgorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU6CisgICAgY2FzZSBTdHVi
SW5mb1N1bW1hcnk6Ok1ha2VzQ2FsbHM6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNT
bG93UGF0aDoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2Vy
dmVkVGFrZXNTbG93UGF0aCA6IExpa2VseVRha2VzU2xvd1BhdGg7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Cisg
ICAgICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZlZFNsb3dQYXRo
QW5kTWFrZXNDYWxscyA6IE1ha2VzQ2FsbHM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFw
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5r
U3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgCisgICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGlkRXhpdCkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1Yklu
Zm87CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRC
bG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlIC8v
IEVOQUJMRShKSVQpCisgICAgVU5VU0VEX1BBUkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKGRp
ZEV4aXQpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwor
UHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICByZXR1cm4g
Y29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJ
bmZvLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGlu
ZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOworfQorCitQdXRCeVN0YXR1cyBQ
dXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorewor
ICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnko
cHJvZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOworICAgIGlmICghaXNJbmxpbmVhYmxlKHN1
bW1hcnkpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoc3VtbWFyeSwgKnN0dWJJbmZvKTsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgeworICAgIGNhc2UgQ2Fj
aGVUeXBlOjpVbnNldDoKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0
byBjYWNoZSBidXQgZmFpbGVkIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgcmV0dXJuIFB1dEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgIAor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogeworICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOworICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQodWlkKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAgICAgICAg
ICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5m
by0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgCisgICAg
ICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0
KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoYWNj
ZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0
QnlWYXJpYW50OjpyZXBsYWNlKGFjY2Vzcy5pZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihz
dW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNp
dGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGFjY2Vzcy5u
ZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vzcy51aWQoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgYXV0byB2YXJpYW50ID0gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGFjY2Vz
cy5pZGVudGlmaWVyKCksIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1dGVGb3Ioc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy51
aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4
R2V0U3RhdHVzLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1
czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNT
bG93UGF0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3Rh
dHVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhdXRvIHZh
cmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnNldHRlcihhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1
cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9u
U2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgorICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5z
aHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1
czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQoreworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOworICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2Fs
bEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2Vs
aW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRD
YWNoZUV4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworCisgICAgZm9yIChJ
Q1N0YXR1c0NvbnRleHQqIGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKKyAgICAgICAgSUNTdGF0
dXMgc3RhdHVzID0gY29udGV4dC0+Z2V0KGNvZGVPcmlnaW4pOworICAgICAgICAKKyAgICAgICAg
YXV0byBibGVzcyA9IFsmXSAoY29uc3QgUHV0QnlTdGF0dXMmIHJlc3VsdCkgLT4gUHV0QnlTdGF0
dXMgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc0lubGluZWQoY29kZU9yaWdpbikpIHsK
KyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3Io
CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29k
ZUluZGV4LCBkaWRFeGl0LAorICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNpdGVEYXRhKTsK
KyAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGF0dXMuc3R1YkluZm8pIHsKKyAgICAg
ICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCisg
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBz
dGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnB1dFN0YXR1
cykKKyAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBi
eXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKK30KKworUHV0QnlTdGF0
dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
Ym9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQor
eworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOworICAgIGlm
IChwYXJzZUluZGV4KCp1aWQpKQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKCk7CisgICAgCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IFB1dEJ5U3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc2V0W2ldOworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCisgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9m
ZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJpdmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQor
ICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMgd2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRl
IGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQgdG8gdGFrZSAKKyAgICAgICAgICAgIC8vIHNs
b3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCisgICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxk
UHV0S2luZC5pc0RlZmluZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhM
aWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNT
bG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRh
a2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQdXRCeVZhcmlhbnQg
dmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShpZGVudGlmaWVyLCBzdHJ1Y3R1cmUsIG9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGhh
dmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAorICAg
ICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNl
IGl0IG1lYW5zIHdlIGFyZQorICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5z
dGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQorICAgICAgICAvLyBzbG93IHBh
dGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KKyAgICAgICAg
aWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAvLyBPdXIgaHlwb3RoZXNp
cyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQg
dGhpcyBpcyByZWFsbHkKKyAgICAgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0
eSBjaGVja3MuCisgICAgCisgICAgICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBv
biBkaWN0aW9uYXJpZXMuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisg
ICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQg
aXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCisgICAgICAgIC8vIHdlIGRvbid0
IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3RyaW5ncy4KKyAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Cisg
ICAgICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7CisgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3NDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCB1aWQpOworICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFs
cmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICghdHJhbnNpdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgQVNTRVJU
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgICAgIGJvb2wgZGlkQXBwZW5kID0g
cmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKGlkZW50aWZpZXIs
IHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
aWYgKCFkaWRBcHBlbmQpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBQdXRCeVN0YXR1czo6bWFrZXNDYWxs
cygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0
aW9uOgorICAgIGNhc2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgTWFrZXNDYWxsczoK
KyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFNpbXBsZTogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3Zh
cmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFr
ZXNDYWxscygpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgfQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0
YXR1czo6c2xvd1ZlcnNpb24oKSBjb25zdAoreworICAgIGlmIChvYnNlcnZlZFN0cnVjdHVyZVN0
dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMo
KSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRo
KTsKKyAgICByZXR1cm4gUHV0QnlTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IExp
a2VseVRha2VzU2xvd1BhdGgpOworfQorCitDYWNoZWFibGVJZGVudGlmaWVyIFB1dEJ5U3RhdHVz
OjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlSWRlbnRpZmll
ckZvcklDU3RhdHVzKG1fdmFyaWFudHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAg
ICB2YXJpYW50LnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVfVklTSVRfQUdH
UkVHQVRFKFB1dEJ5U3RhdHVzKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQg
UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChQ
dXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50Lm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjptYXJrSWZD
aGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5U3RhdHVzOjpt
YXJrSWZDaGVhcChTbG90VmlzaXRvciYpOworCitib29sIFB1dEJ5U3RhdHVzOjpmaW5hbGl6ZShW
TSYgdm0pCit7CisgICAgZm9yIChQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CisgICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2bSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpt
ZXJnZShjb25zdCBQdXRCeVN0YXR1cyYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLm1fc3RhdGUg
PT0gTm9JbmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBtZXJnZVNsb3cg
PSBbJl0gKCkgeworICAgICAgICBpZiAob2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRo
KCkgfHwgb3RoZXIub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCisgICAgICAg
ICAgICAqdGhpcyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxs
cygpKSA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogT2JzZXJ2ZWRUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFr
ZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBNYWtlc0NhbGxzIDogTGlrZWx5VGFr
ZXNTbG93UGF0aCk7CisgICAgfTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2Ug
Tm9JbmZvcm1hdGlvbjoKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0g
U2ltcGxlKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyIDogb3RoZXIubV92YXJpYW50cykgewor
ICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVyZ2VTbG93KCk7CisgICAgICAgIH0KKyAgICAgICAgc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6Cisg
ICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAg
IGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIHJldHVybiBtZXJn
ZVNsb3coKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBQdXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQor
eworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZpbHRl
cklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKKyAgICBmb3IgKFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQuZml4VHJhbnNpdGlvblRv
UmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisgICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBvdXQucHJpbnQo
IigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTGlrZWx5VGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCJMaWtlbHlUYWtlc1Ns
b3dQYXRoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0
aDoKKyAgICAgICAgb3V0LnByaW50KCJPYnNlcnZlZFRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgb3V0LnByaW50KCJNYWtlc0Nh
bGxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtl
c0NhbGxzOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZjNDY4YTI4NmViNWZi
NzFmOTE3YjgwODRjY2RjYTBmNGEyMjhiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkV4aXRGbGFnLmgi
CisjaW5jbHVkZSAiSUNTdGF0dXNNYXAuaCIKKyNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCisjaW5jbHVkZSAiU3R1YkluZm9TdW1tYXJ5
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBWTTsKK2Ns
YXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hh
aW47CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmln
aW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1Yklu
Zm9NYXA7CisKK2NsYXNzIFB1dEJ5U3RhdHVzIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNh
Y2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAor
ICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCisg
ICAgICAgIFNpbXBsZSwKKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFrZSB0aGUgc2xvdyBw
YXRoLgorICAgICAgICBMaWtlbHlUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCdzIGtub3du
IHRvIHRha2Ugc2xvdyBwYXRoLiBXZSBhbHNvIG9ic2VydmVkIHRoYXQgdGhlIHNsb3cgcGF0aCB3
YXMgdGFrZW4gb24gU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIE9ic2VydmVkVGFrZXNTbG93
UGF0aCwKKyAgICAgICAgLy8gSXQgd2lsbCBsaWtlbHkgdGFrZSB0aGUgc2xvdyBwYXRoIGFuZCB3
aWxsIG1ha2UgY2FsbHMuCisgICAgICAgIE1ha2VzQ2FsbHMsCisgICAgICAgIC8vIEl0IGtub3du
IHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLiBXZSBhbHNvIG9ic2VydmVkIHRoYXQgdGhl
IHNsb3cgcGF0aCB3YXMgdGFrZW4gb24gU3RydWN0dXJlU3R1YkluZm8uCisgICAgICAgIE9ic2Vy
dmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzLAorICAgIH07CisgICAgCisgICAgUHV0QnlTdGF0dXMo
KQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCisgICAgeworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIHN3aXRjaCAobV9zdGF0
ZSkgeworICAgICAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIGNhc2UgTGlrZWx5VGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAgICAg
IGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXND
YWxsczoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3R1Yklu
Zm9TdW1tYXJ5LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFB1dEJ5U3RhdHVzKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCkKKyAgICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKKyAg
ICB7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYs
IEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsK
KyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFN0cnVjdHVyZVNldCYsIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgaXNEaXJlY3QsIFByaXZh
dGVGaWVsZFB1dEtpbmQpOworICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0
YXR1c0NvbnRleHRTdGFjayYsIENvZGVPcmlnaW4pOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBz
dGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2Rl
T3JpZ2luKTsKKyNlbmRpZgorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBMaWtl
bHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0
OworICAgIFB1dEJ5U3RhdHVzIHNsb3dWZXJzaW9uKCkgY29uc3Q7CisgICAgYm9vbCBvYnNlcnZl
ZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE9i
c2VydmVkVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtl
c0NhbGxzOyB9CisgICAgCisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiYg
dmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgUHV0QnlW
YXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhd
OyB9CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5nbGVJ
ZGVudGlmaWVyKCkgY29uc3Q7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgbWVyZ2UoY29uc3QgUHV0
QnlTdGF0dXMmKTsKKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJ
bmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisjZW5kaWYKKyAgICBzdGF0aWMg
UHV0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsK
KyAgICAKKyAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgVmVjdG9y
PFB1dEJ5VmFyaWFudCwgMT4gbV92YXJpYW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMDdjNTM1YjM3NDA0ODEwOWU2OWM5MGFkOGM5YTlmZjI5NDg3YzIzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5j
cHAKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlWYXJp
YW50LmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1B1dEJ5VmFyaWFudDo6UHV0QnlWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFu
dCYgb3RoZXIpCisgICAgOiBQdXRCeVZhcmlhbnQob3RoZXIubV9pZGVudGlmaWVyKQoreworICAg
ICp0aGlzID0gb3RoZXI7Cit9CisKK1B1dEJ5VmFyaWFudCYgUHV0QnlWYXJpYW50OjpvcGVyYXRv
cj0oY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX2tpbmQgPSBvdGhlci5tX2tp
bmQ7CisgICAgbV9vbGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKKyAgICBtX25l
d1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOworICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CisgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAg
ICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IG1ha2VVbmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOworICAgIG1faWRlbnRp
ZmllciA9IG90aGVyLm1faWRlbnRpZmllcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1B1dEJ5
VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAg
cmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitQdXRCeVZhcmlhbnQgUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50
IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gVHJhbnNp
dGlvbjsKKyAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6c2V0dGVyKENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cykKK3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikp
OworICAgIHJlc3VsdC5tX2tpbmQgPSBTZXR0ZXI7CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
ID0gc3RydWN0dXJlOworICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsK
KyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJ1Y3R1cmUqIFB1dEJ5VmFyaWFudDo6b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBt
X25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBQdXRCeVZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAgICBpZiAoc3Ry
dWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgbV9raW5kID0gUmVwbGFjZTsK
KyAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOworfQorCitib29sIFB1dEJ5VmFyaWFu
dDo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UHV0QnlWYXJpYW50OjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICByZXR1cm4gb2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGtpbmQo
KSA9PSBTZXR0ZXI7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25z
dCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90
aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1faWRl
bnRpZmllciAmJiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5v
dFNldDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgICAgICBB
U1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhl
ci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHJhbnNp
dGlvbjogeworICAgICAgICAgICAgUHV0QnlWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKKyAg
ICAgICAgICAgIGlmIChuZXdWYXJpYW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBs
YWNlKCp0aGlzKSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgVHJhbnNpdGlvbjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlv
bldpdGhSZXBsYWNlKG90aGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRp
b246IHsKKyAgICAgICAgICAgIGlmIChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX25ld1N0cnVjdHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlm
ICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VkQ29u
ZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNl
dCk7CisgICAgICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNl
dHRlcjogeworICAgICAgICBpZiAob3RoZXIubV9raW5kICE9IFNldHRlcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8
IG90aGVyLm1fY2FsbExpbmtTdGF0dXMpIHsKKyAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtT
dGF0dXMgJiYgb3RoZXIubV9jYWxsTGlua1N0YXR1cykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1lcmdlZENvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0
Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICAgICAgaWYgKCFtZXJn
ZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xv
dEJhc2VDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAg
IAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKKyAgICAgICAgICAgIG1fY2FsbExpbmtT
dGF0dXMtPm1lcmdlKCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgCisgICAgICAg
IG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjphdHRlbXB0VG9N
ZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpCit7
CisgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICBBU1NFUlQocmVwbGFjZS5t
X2tpbmQgPT0gUmVwbGFjZSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0ID09IHJlcGxhY2UubV9vZmZz
ZXQpOworICAgIEFTU0VSVCghcmVwbGFjZS53cml0ZXNTdHJ1Y3R1cmVzKCkpOworICAgIEFTU0VS
VCghcmVwbGFjZS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHJlcGxhY2UuY29u
ZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHNvcnQgb2YgbWVyZ2lu
ZyBvbmx5IHdvcmtzIHdoZW4gd2UgaGF2ZSBvbmUgcGF0aCBhbG9uZyB3aGljaCB3ZSBhZGQgYSBu
ZXcgZmllbGQgd2hpY2gKKyAgICAvLyB0cmFuc2l0aW9ucyB0byBzdHJ1Y3R1cmUgUyB3aGlsZSB0
aGUgb3RoZXIgcGF0aCB3YXMgYWxyZWFkeSBvbiBzdHJ1Y3R1cmUgUy4gVGhpcyBkb2Vzbid0Cisg
ICAgLy8gd29yayBpZiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW55dGhpbmcgb3IgaWYgdGhlIHJl
cGxhY2UgcGF0aCBpcyBwb2x5bW9ycGhpYy4KKyAgICAKKyAgICBpZiAocmVhbGxvY2F0ZXNTdG9y
YWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVwbGFjZS5tX29s
ZFN0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX29sZFN0cnVjdHVyZS5tZXJnZShtX25ld1N0cnVjdHVy
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIFB1dEJ5VmFyaWFudDo6dmlzaXRBZ2dyZWdhdGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitERUZJTkVf
VklTSVRfQUdHUkVHQVRFKFB1dEJ5VmFyaWFudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Cit2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBtX29sZFN0cnVjdHVyZS5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAobV9uZXdT
dHJ1Y3R1cmUpCisgICAgICAgIG1fbmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
K30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xv
dFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYpOworCitib29sIFB1dEJ5VmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQoreworICAg
IGlmICghbV9vbGRTdHJ1Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0
cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jYWxs
TGlua1N0YXR1cyAmJiAhbV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51
bGxwdHIpOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjwi
KTsKKyAgICBvdXQucHJpbnQoImlkPSciLCBtX2lkZW50aWZpZXIsICInLCAiKTsKKyAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoImVtcHR5
PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAg
ICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgb3V0
LnByaW50KAorICAgICAgICAgICAgIlRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIgdG8gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0
KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIs
ICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXR0ZXI6CisgICAg
ICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICJTZXR0ZXI6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0iKTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1
cyk7CisgICAgICAgIG91dC5wcmludCgiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlW
YXJpYW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODE0MDJiNDI1NmFkZTdlMDU2NTBhOWZmMGY2ODQ1ZWMxYjMxZWI0YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlh
bnQuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtTdGF0
dXM7CisKK2NsYXNzIFB1dEJ5VmFyaWFudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAgICBSZXBs
YWNlLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBTZXR0ZXIKKyAgICB9OworICAgIAor
ICAgIFB1dEJ5VmFyaWFudChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCisgICAgICAg
IDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAg
ICAgICAsIG1fbmV3U3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9pZGVudGlmaWVyKFdU
Rk1vdmUoaWRlbnRpZmllcikpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeVZhcmlhbnQo
Y29uc3QgUHV0QnlWYXJpYW50Jik7CisgICAgUHV0QnlWYXJpYW50JiBvcGVyYXRvcj0oY29uc3Qg
UHV0QnlWYXJpYW50Jik7CisKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHJlcGxhY2UoQ2FjaGVh
YmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAg
IAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgdHJhbnNpdGlvbihDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyBQdXRCeVZhcmlhbnQgc2V0dGVyKENhY2hlYWJsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOworICAgIAor
ICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBt
X29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwg
a2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdDsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRp
b24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIHZv
aWQgZml4VHJhbnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OworICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OworICAgIAorICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRp
dGlvblNldDsgfQorICAgIAorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3Ig
U2V0dGVycyAoaXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZv
ciB0ZW1wbGF0ZWQgaGVscGVycy4KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyBy
ZXR1cm4gTm9JbnRyaW5zaWM7IH0KKworICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KKyAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX2NhbGxMaW5r
U3RhdHVzLmdldCgpOworICAgIH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcik7CisgICAgCisgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBtYXJrSWZDaGVhcChWaXNpdG9yJik7
CisgICAgYm9vbCBmaW5hbGl6ZShWTSYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUHV0
QnlWYXJpYW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAh
IW90aGVyLm1faWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAobV9pZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVy
Lm1faWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNl
dCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZShjb25zdCBQdXRCeVZhcmlhbnQmIHJlcGxhY2UpOworICAgIAorICAgIEtp
bmQgbV9raW5kOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFN0cnVjdHVyZVNl
dCBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlIHsgbnVsbHB0
ciB9OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKKyAgICBD
YWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVz
ZXMuY3BwCmluZGV4IDBjNGMwNzQ3YTBhYjg1ZmIzYWY4MTdkMjk0NWQ2MjFhZGMzZWJhZDcuLmZj
ZTBmNGQ4ZWUxMGVkZGJjZjNjNzU0ZWY4MzNhMzViZTk3ZGJjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKQEAgLTYyLDEw
ICs2MiwxMCBAQCBHZXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkR2V0QnlTdGF0dXMo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29ucwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAgICAgCi1QdXRCeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVz
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHN0YXR1
cykKK1B1dEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRQdXRCeVN0YXR1cyhjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeVN0YXR1cyYgc3RhdHVzKQogewotICAg
IGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeUlkU3RhdHVzPihzdGF0dXMpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKKyAgICBhdXRvIHN0YXR1
c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlTdGF0dXM+KHN0YXR1cyk7CisgICAgUHV0QnlTdGF0dXMq
IHJlc3VsdCA9IHN0YXR1c1B0ci5nZXQoKTsKICAgICBwdXRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihjb2RlT3JpZ2luLCBXVEZNb3ZlKHN0YXR1c1B0cikpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMTA3LDYgKzEwNyw4IEBAIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdh
dGVJbXBsKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZ2V0cykK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGZvciAo
YXV0byYgcGFpciA6IHB1dHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBpbnMpCiAgICAgICAgIHBhaXIuc2Vjb25k
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZWxldGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmgKaW5kZXggYmQxNTcwNTQ1NzM4MGMzNzdiODQyODZkNTNhYTg2OGEzMjYzMjRiNS4uOTQ5ODNk
YmM3NjdkMDdlMjgwNGJkNDQyYzM3ZWI1NGNmNDU3YmE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlTdGF0dXMuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgog
I2luY2x1ZGUgIkluQnlTdGF0dXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1
c2VzIHsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogYWRkQ2FsbExpbmtTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IENhbGxMaW5rU3RhdHVzJik7CiAgICAgR2V0QnlTdGF0dXMqIGFk
ZEdldEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBHZXRCeVN0YXR1cyYpOwotICAg
IFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IFB1dEJ5SWRTdGF0dXMmKTsKKyAgICBQdXRCeVN0YXR1cyogYWRkUHV0QnlTdGF0dXMoY29uc3Qg
Q29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5U3RhdHVzJik7CiAgICAgSW5CeVN0YXR1cyogYWRkSW5C
eVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeVN0YXR1cyYpOwogICAgIERlbGV0
ZUJ5U3RhdHVzKiBhZGREZWxldGVCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgRGVs
ZXRlQnlTdGF0dXMmKTsKICAgICBDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyogYWRkQ2hlY2tQcml2
YXRlQnJhbmRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzJik7CkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBSZWNvcmRlZFN0YXR1c2VzIHsKICAg
ICAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4+PiBjYWxsczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0
ZDo6dW5pcXVlX3B0cjxHZXRCeVN0YXR1cz4+PiBnZXRzOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFB1dEJ5SWRTdGF0dXM+Pj4gcHV0czsKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeVN0YXR1cz4+
PiBwdXRzOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PEluQnlTdGF0dXM+Pj4gaW5zOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPERlbGV0ZUJ5U3RhdHVzPj4+IGRlbGV0ZXM7CiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM+
Pj4gY2hlY2tQcml2YXRlQnJhbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggNzU5MThmNjc3MzE4M2NkZmNlYjIz
ZGMzY2MyMWQzMjdlOWZhMTg2OC4uZjI3YjczNzRlZjlhZWUxMDdhNzAxNmRhODgxYmNlZGY3ODE5
ZDQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC0yODEsOCArMjgxLDExIEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2Nr
KiBjCiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRH
ZXRCeShjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6Ci0gICAgICAgIHJlc2V0UHV0QnlJRChj
b2RlQmxvY2ssICp0aGlzKTsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgcmVzZXRQdXRC
eShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CiAgICAgICAgIHJlc2V0SW5CeShjb2RlQmxvY2ss
ICp0aGlzLCBJbkJ5S2luZDo6QnlJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDczMDRmYjE1NGU4NDBkODVkYTI4ZTZl
MjUwMWFhYjE4ZTU1ZDQxYTQuLmU2N2JjMTA4YmUzMjBkZDZkMjU5ZTc3YzgxYjlkNTFjNDVjZjU4
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlJZERpcmVjdCwKICAgICBUcnlHZXRCeUlkLAogICAgIEdldEJ5VmFsLAot
ICAgIFB1dCwKKyAgICBQdXRCeUlkLAorICAgIFB1dEJ5VmFsLAogICAgIEluQnlJZCwKICAgICBJ
bkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtMzY1LDYgKzM2Niw3IEBAIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgR1BSUmVnIGJyYW5kR1BSOwogICAgIH0gcmVnczsK
ICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcg
bV9hcnJheVByb2ZpbGVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBHUFJSZWcgdmFsdWVUYWdHUFI7CiAgICAgLy8gRklYTUU6IFszMi1iaXRzXSBDaGVj
ayBpZiBTdHJ1Y3R1cmVTdHViSW5mbzo6YmFzZVRhZ0dQUiBpcyB1c2VkIHNvbWV3aGVyZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAppbmRleCBkMWMwYjQ2YTZhOTA3MzkwMzU5ZGQzMGMwY2U2OGMxMWMxN2Iy
ODIxLi4wN2MyZDFmMzVkYjJmNTk0NjFhNDk3NDk1YTNmYTJjNzQ0NmM3N2E3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0
b3IuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRT
dGF0dXMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTM5NzMsNyArMzk3Myw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVj
dHVyZXMoKTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAg
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgdGhpc1NldCA9ICptX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVy
KGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQpAQCAtMzk4Miw3ICsz
OTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKICAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVl
Lm1lcmdlKHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBpZiAo
dGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gbmV3U3RydWN0dXJlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTM5OTAsNyArMzk5MCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgfSAvLyBlbHNlIHRoaXMgaXMgcmVhbGx5
IGEgcmVwbGFjZS4KICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAg
bmV3U2V0Lm1lcmdlKHRoaXNTZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQw
LDEwICs0MTQwLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VBY2Nlc3NJbmxpbmluZygpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJl
Y3QgfHwgbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQ7CiAgICAgICAgICAgICBhdXRv
IHByaXZhdGVGaWVsZFB1dEtpbmQgPSBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJZCA/
IG5vZGUtPnByaXZhdGVGaWVsZFB1dEtpbmQoKSA6IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUo
KTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUudG9T
dHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVy
KCkudWlkKCksCisgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLAog
ICAgICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAg
ICAgICAgYm9vbCBhbGxHb29kID0gdHJ1ZTsKQEAgLTQxNTEsNyArNDE1MSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCBu
ZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsR29vZCA9IGZhbHNlOwpAQCAtNDE2MiwxNCArNDE2MiwxNCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEdvb2QpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1NldC5hZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NldC5tZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ3
Myw3ICs0NDczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIEV4aXRPSzoK
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0
dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRl
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTQ2
NTIsMTAgKzQ2NTIsMTAgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZmlsdGVySUNTdGF0dXMoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6IHsKKyAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgp
KQotICAgICAgICAgICAgbm9kZS0+cHV0QnlJZFN0YXR1cygpLT5maWx0ZXIodmFsdWUubV9zdHJ1
Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICBub2RlLT5wdXRCeVN0YXR1cygp
LT5maWx0ZXIodmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggYzIxNmEzOTZkNzE2MDQyMGRm
YjQ4MTVmMTI3ZTc4NTlkNWE5MTczYi4uNmUyNzUzMTA0YmQzODE1OWNjYjFiMWQzOTM3MTUzODZi
NjQ4NmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC00MDIsNyArNDAyLDcgQEAgY2xhc3Mg
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0
dXM6CkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRl
eCA2M2U2OGQwMzdmZTExMTAxYWU0MTJhMjc4MjI1M2Y1OTQzYmQ2MjdiLi5iNjI0NzhlZjQ2NmU2
YjZiNzI5NDY4NTNiNzAxZmQyZWQyYmQwZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUg
IkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC03NCw3
ICs3Myw3IEBACiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHJp
dmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgotI2luY2x1ZGUg
IlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJl
Z0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2lu
Y2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC0yMzksMTEgKzIzOCwxMSBAQCBjbGFzcyBCeXRl
Q29kZVBhcnNlciB7CiAgICAgYm9vbCBjaGVja1ByZXNlbmNlKEpTT2JqZWN0KiBrbm93bkJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYp
OwogICAgIHZvaWQgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoTm9kZSogYmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCi0g
ICAgLy8gV29ya3Mgd2l0aCBib3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9m
IFB1dEJ5SWRWYXJpYW50LgorICAgIC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5k
IHRoZSBzZXR0ZXIgZm9ybSBvZiBQdXRCeVZhcmlhbnQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFyaWFudFR5cGU+CiAgICAgTm9kZSogbG9hZChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgY29uc3QgVmFyaWFudFR5cGUmKTsKIAotICAgIE5v
ZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIHN0b3JlKE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYsIE5vZGUqIHZhbHVlKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CkBAIC0yNTMsMTMgKzI1MiwxMyBAQCBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiAg
ICAgdm9pZCBoYW5kbGVHZXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMp
OwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJl
Y3QsIEVDTUFNb2RlKTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Tm9kZSogdmFsdWUsICBjb25zdCBQdXRCeVN0YXR1cyYsIGJvb2wgaXNEaXJlY3QsIEVDTUFNb2Rl
KTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJs
ZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25z
dCBQdXRCeUlkU3RhdHVzJiwKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3Rh
dHVzJiwKICAgICAgICAgYm9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgs
IEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAotICAgICAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtp
bmQpOworICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLCBQcml2YXRl
RmllbGRQdXRLaW5kKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlQnlJZCgKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVCeVN0YXR1cywgRUNNQU1vZGUpOwpA
QCAtNDUxNCw3ICs0NTEzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAg
ICAgICAgICAgLy8gdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlIHByb3BlcnR5LiBXZSBjYW4gb25s
eSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIHN0cnVjdHVyZXMgaW4gdGhlIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkgYWdyZWUgb24g
dGhlIHByb3RvdHlwZSAoaXQgd291bGQgYmUKICAgICAgICAgICAgICAgICAvLyBoaWxhcmlvdXNs
eSByYXJlIGlmIHRoZXkgZGlkbid0KS4gTm90ZSB0aGF0IHdlIGFyZSByZWx5aW5nIG9uIHN0cnVj
dHVyZVNldCgpIGhhdmluZwotICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVtZW50
LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0YXR1
cy9QdXRCeUlkU3RhdHVzIHdvcmsuCisgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGVs
ZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1c2Ugb2YgaG93IEdldEJ5
U3RhdHVzL1B1dEJ5U3RhdHVzIHdvcmsuCiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmln
aHQgbm93LCBpZiB3ZSBoYXZlIGFuIE9QQ1MsIHdlIGhhdmUgbW9ubyBwcm90by4gSG93ZXZlciwg
dGhpcyB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBjaGFuZ2VkIGluIHRoZSBm
dXR1cmUgb25jZSB3ZSBoYXZlIGEgaHlicmlkIGRhdGEgc3RydWN0dXJlIGZvcgpAQCAtNDU5Myw5
ICs0NTkyLDkgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgcmV0dXJuIGxvYWRl
ZFZhbHVlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZh
bHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXIsIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxh
Y2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShiYXNlLCBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0
dXJlKCkpOwogICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2
YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CkBAIC00OTk4LDM5ICs0OTk3LDM5IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUluQnlJZChWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5v
ZGUqIGJhc2UsIENhY2hlCiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAot
ICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgTm9kZSogdmFs
dWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEVD
TUFNb2RlIGVjbWFNb2RlKQorICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9v
bCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGlzRGlyZWN0KQogICAg
ICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZv
KGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYWRkVG9HcmFwaChw
dXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOworICAgICAgICBh
ZGRUb0dyYXBoKHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKSA/IFB1dEJ5SWRGbHVzaCA6IFB1dEJ5
SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKGVjbWFNb2RlKSwgYmFzZSwgdmFsdWUpOwog
fQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywg
Ym9vbCBpc0RpcmVjdCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFN
b2RlKQorICAgIGNvbnN0IFB1dEJ5U3RhdHVzJiBwdXRCeVN0YXR1cywgYm9vbCBpc0RpcmVjdCwg
Qnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIGlm
ICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAgICAgaWYgKCFwdXRC
eUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NpbXBsZSgpIHx8ICFw
dXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygp
KSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVt
aXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3Qs
IGVjbWFNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJ
ZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFu
LmlzRlRMKCkgfHwgcHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0
dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZU
TCgpIHx8IHB1dEJ5U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6
OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
Z0xpc3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAg
fHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXNEaXJl
Y3QpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBp
ZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0
QnlTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjaGVjayhwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgICAg
IGlmICghY2hlY2socHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5jb25kaXRpb25TZXQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUs
IHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTAzOSwyOCArNTAz
OCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAo
VU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29t
cGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKIAotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCi0gICAgICAgIGZvciAoY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAg
ICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0YXR1cy52YXJp
YW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0
QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0
dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0YXR1cy52YXJp
YW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIGJh
c2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQocHV0
QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlTdGF0dXMubnVt
VmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBwdXRC
eVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7Ci0gICAgY2Fz
ZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1
dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2Up
OworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpSZXBsYWNlOiB7CisgICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFz
ZSk7CiAKICAgICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFs
dWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUw
NjgsMTIgKzUwNjcsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZh
cmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1
cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1
cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJp
YW50LmNvbmRpdGlvblNldCgpKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAg
ICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMs
IGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtNTEzNSwxMiArNTEzNCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJp
YW50OjpTZXR0ZXI6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMo
Y3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICBjYXNlIFB1
dEJ5VmFyaWFudDo6U2V0dGVyOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0
dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBsb2FkKFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQpOwogICAgICAgICBpZiAoIWxvYWRlZFZhbHVlKSB7Ci0gICAgICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUxODQsMjYgKzUxODMsMjYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgZGVmYXVs
dDogewotICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwg
aWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfSB9CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dFByaXZhdGVOYW1lQnlJZCgKICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAotICAgIGNv
bnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKIHsKLSAgICBpZiAoIXB1dEJ5
SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFP
cHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJZFN0YXR1
cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlTdGF0
dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgeworICAg
ICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEZv
cmNlT1NSRXhpdCk7CiAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcElu
Zm8oaWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8
fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJp
YW50cygpID4gMSkgeworICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0
QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAgICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1v
cnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUo
KSkgeworICAgICAgICAgICAgfHwgcHV0QnlTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6
Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8o
cHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNTIxMSwyOSArNTIxMCwyOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkUHV0QnlJZCgpOwogICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRT
dGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJ
ZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAg
ICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgIGZvciAo
Y29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFudHMoKSkgewog
ICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0
YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRz
KCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFudHMoKTsKICAg
ICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CiAgICAgICAg
IGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMu
bnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkg
PT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlTdGF0dXNbMF07
CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2U6IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogewogICAg
ICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKLSAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRT
dGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0
YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAgICAgICAgc3Rv
cmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCwgdmFsdWUpOwogICAgICAgICBpZiAo
VU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkKQEAgLTUyNDEsOSArNTI0MCw5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uOiB7
CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb246IHsKICAgICAgICAgQVNTRVJUKHBy
aXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSk7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5h
ZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFz
ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBo
Lm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpKSksIGJhc2UpOwogICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpKSB7CkBAIC02NDU0LDQwICs2NDUzLDMwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZz
ZXQgPSBmYWxzZTsKIAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
OwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJ
ZFN0YXR1czsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1f
YmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUlu
ZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5
dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVj
b21lcyBudWxsLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8g
aW5mb3JtYXRpb24uIEZvciBgcHV0X3ByaXZhdGVfbmFtZWAsIHdlIG1pZ2h0IGhhdmUgc29tZSBp
bmZvIGZyb20KLSAgICAgICAgICAgICAgICAvLyBMTEludCBJQywgaW5jbHVkaW5nIGNhY2hlZCBj
ZWxsIHRoYXQgd2UgY291bGQgdXNlIGlmIEJ5VmFsIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjc3
OQotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgICAgICYm
IGJ5VmFsSW5mby0+c3R1YkluZm8KLSAgICAgICAgICAgICAgICAgICAgJiYgIWJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0cnlDb21waWxlQXNQ
dXRCeU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBieVZh
bEluZm8tPmNhY2hlZElkOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnRpZmllci5p
c1N5bWJvbENlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwotICAgICAgICAg
ICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAg
ICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRJZGVudCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKKyAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKIAotICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6
Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3Rh
Y2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisgICAgICAg
ICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5n
bGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKHVpZCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRl
bnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
aXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJ
bmZvKHVpZCksIHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRQcml2
YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0
YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5Q29tcGls
ZUFzUHV0QnlPZmZzZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgYnl0ZWNvZGUubV9wdXRLaW5kKTsKLSAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQpCiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5m
byhieXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYs
MTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1f
ZmxhZ3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVz
IHB1dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAg
ICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJ
ZFN0YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21h
TW9kZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5
U3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFN
b2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAg
fQogCkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xv
YmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwog
ICAgICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFs
c2UsIFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZp
ZWxkUHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVz
OjpMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1sw
XS5raW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwg
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTg4MTQsNjIgKzg4MDMsNDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VDb2RlQmxvY2soKQogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVj
b2RlSW5kZXggb3NyRXhpdEluZGV4KQogeworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29k
ZS5tX2Jhc2UpOwogICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkp
OwogICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNE
aXJlY3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAg
Ym9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlk
U3RhdHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwotICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5t
X2Jhc2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJ
bmRleCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVj
b2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21l
cyBudWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1h
dGlvbi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlW
YWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93
UGF0aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAm
JiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmll
ci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogCisgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBt
X2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50
Q29kZU9yaWdpbigpKTsKKworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRUeXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAgICAgaWYg
KENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVy
KCkpIHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRl
bnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2Vs
bCgpKSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0lzQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
ZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3Vy
cmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBi
eXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1
ZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJZCkKLSAgICAgICAg
ICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNt
YU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKLSAgICAgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKIAogICAgICAg
ICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkp
OwogICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KG51bGxwdHIpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICBh
ZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgotICAgICAg
ICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1
dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNt
YU1vZGUpKTsKKyAgICAgICAgTm9kZSogcHV0QnlWYWwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gUHV0QnlWYWwgYW5kIFB1dEJ5VmFsRGlyZWN0IG11c3QgYmUgdHJlYXRl
ZCBhcyBpZiB0aGV5IGNsb2JiZXIgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFr
ZSB0aGVtIGdlbmVyaWMuCisgICAgICAgIGlmIChzdGF0dXMub2JzZXJ2ZWRTdHJ1Y3R1cmVTdHVi
SW5mb1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmFkZChw
dXRCeVZhbCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEuLjZm
MjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOgog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAppbmRl
eCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40Y2U5ZmYwZWI1ZGE1
MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyArODEsNyBAQCBib29s
IGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoK
ICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1NDE3MjU3NTVmNDhj
ZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0MWQ5MzI0YTQwYzE2
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
ICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBA
IC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAg
ICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVyaWNGaWx0ZXIoWyZd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3Ry
dWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDExICs1MTMsOSBAQCBj
bGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6cmVw
bGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFu
dC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMTMsNyArMTIxMSw3
IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
bm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVk
Z2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZhbHVlLCBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB2
b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIGNv
bnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hp
bGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxwdHI7Ci0gICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBAIGNsYXNzIENvbnN0
YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9kZS0+Y29udmVydFRv
UHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2UpOwogICAgICAgICBu
b2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgaWYgKGRp
ZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBO
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQwNCwxMCBAQCBjbGFz
cyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGlmICghYmFz
ZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAor
ICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCiAgICAg
ICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAg
ICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgIG5vZGUt
PmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0LCBwcml2YXRlRmll
bGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQpAQCAtMTQyNCw4
ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewog
CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICBUcmFuc2l0
aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbmV3
U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZhdGVGaWVsZFB1dEtp
bmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2
YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0
Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7
CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCiAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0
dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3Rh
dHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICBFZGdlKGJh
c2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlLi5l
NjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVz
OgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5NjRlOWE1Y2YyZDU2
YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5lMjViMWYzODU0OTM1NGFlMTMyYWRkYmNiNjhhY2I5
ZGE4MGI1Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKQEAgLTEyMzYsNiArMTIzNiwxMCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNlPihjaGlsZDIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGNoaWxkMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAg
IC8vIER1ZSB0byByZWdpc3RlciBwcmVzc3VyZSBvbiAzMi1iaXQsIHdlIHNwZWN1bGF0ZSBjZWxs
IGFuZApAQCAtMjg2NSw3ICsyODY5LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNl
IEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4ZTc3NDZjOWRjNDM5
NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2MDhmMGE5NTA4NzYz
OGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTM4NSw4
ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIq
IHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzSW5CeVN0YXR1cygp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVzKCkpOwotICAgIGlm
IChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgKm5v
ZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5U3RhdHVzKCkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkpOwogICAgIGlmIChu
b2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
ZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSk7
CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CmluZGV4IDYyYTFmZWYzZGMyY2RkZTEwOTE1MjRkNjczNDA4NDBmZDNmMjYwYjEuLjFiZWM4ZGVl
ZDlkYmRiYTUwN2Q5YTNmYjFiMDM5ZTI2ZWUxYWRkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKQEAgLTEyMDIsNiArMTIwMiw3IEBAIGNsYXNzIEdyYXBoIGZpbmFsIDogcHVi
bGljIHZpcnR1YWwgU2Nhbm5hYmxlIHsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN5bWJvbFN0
cnVjdHVyZTsKIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd0dldEJ5VmFsOworICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fc2xvd1B1dEJ5VmFsOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5MTBjZjEzOTlmYzZj
OWRiMWE3YzU0NGZhMWNhOThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIwMGM2NThhNmRmNDM5
YTc5MTg0MmU4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0
aFRoaXMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxz
LCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBsaW5r
QnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgbGlua0J1ZmZl
cik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlua0J1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMwMzlhMzYwZmQxMGFh
NDA5NGY1NzA2MGE3Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5Njg0NjVkMDdiNjkx
YjI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAt
MTk5LDYgKzE5OSwxMSBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMg
ewogICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBwZXI8SklUUHV0QnlJ
ZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUHV0QnlW
YWwoY29uc3QgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElubGluZUNhY2hlV3Jh
cHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOworICAgIH0KKwogICAg
IHZvaWQgYWRkRGVsQnlJZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4sIFNsb3dQYXRo
R2VuZXJhdG9yKiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJZHMuYXBwZW5kKElu
bGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQYXRoKSk7CkBA
IC0zNjAsNiArMzY1LDcgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJz
IHsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFw
cGVyPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAgICAgVmVjdG9yPElu
bGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9wdXRCeUlkczsKKyAg
ICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9w
dXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJh
dG9yPiwgND4gbV9kZWxCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hl
V3JhcHBlcjxKSVRJbkJ5SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2
NGYwZDZmNDY0NjY0ZDBmLi4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDliMjBmYTczMGMzYzhh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKQEAgLTEwNiw3ICsx
MDYsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0
YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5Ogog
ICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1
czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5YzhhYmFhMWQzOWIzNTFk
Mjc3YTE5YmQxYzlhLi43Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0OGE1OGUzM2QzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAj
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50
LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5k
VmFyaWFudC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVHlwZUxv
Y2F0aW9uLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAK
IHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcjsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIFZlY3Rv
cjxQdXRCeVZhcmlhbnQsIDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wgd3JpdGVzU3RydWN0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CkBAIC0z
MjEwLDE1ICszMjEwLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
LmFzPEluQnlTdGF0dXMqPigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1B1dEJ5SWRTdGF0
dXMoKQorICAgIGJvb2wgaGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gRmlsdGVyUHV0QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVy
UHV0QnlTdGF0dXM7CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMqIHB1dEJ5SWRTdGF0
dXMoKQorICAgIFB1dEJ5U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewotICAgICAgICBBU1NF
UlQoaGFzUHV0QnlJZFN0YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1dEJ5
SWRTdGF0dXMqPigpOworICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMoKSk7CisgICAgICAg
IHJldHVybiBtX29wSW5mby5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQogCiAgICAgYm9vbCBo
YXNEZWxldGVCeVN0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggZTc1YmNmZThhMWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMC4uOWE5MGE0Y2Zk
YWM4ZjIzNTE4Mjg3MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oRmlsdGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1h
Y3JvKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhG
aWx0ZXJQdXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckRl
bGV0ZUJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJT
ZXRQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRl
eCBiMWNmZWU4YWNlYzM4Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4yODk3Mzc4YmY5ODU4
YjFjNGNmYTZhMzExMDI4Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMTUsMjEgKzIx
NSw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVy
UmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2FzZSBJbmxpbmVDYWxs
RnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJD
YWxsOiB7Ci0gICAgICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3Bf
cHV0X2J5X3ZhbCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUgb3BfcHV0X2J5X3Zh
bCBhcyBQdXRCeUlkIGFuZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVuIHdlIGZvdW5kIFN0
cnVjdHVyZVN0dWJJbmZvIGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAgICAgICAgICAgICAg
Ly8gQnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZpbmQgU3RydWN0dXJl
U3R1YkluZm8gaGVyZS4gTGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpby4KLSAg
ICAgICAgICAgICAgICAvLyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlzIGNvbXBpbGVkLgot
ICAgICAgICAgICAgICAgIC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAgICAgICAgICAgICAg
Ly8gMy4gU2luY2UgKEEpIGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcHV0X2J5X3Zh
bCwgKEIpIGNhbiBnZXQgU3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5kIGNvcG1pbGUgaXQg
YXMgaW5saW5lZCBTZXR0ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0LiAoQSkncyBKSVRE
YXRhIGlzIGRlc3Ryb3llZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRoZW4sIChBKSBiZWNv
bWVzIExMSW50LgotICAgICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxvY2sgaW5saW5pbmcg
KEEpIGdldHMgT1NSIGV4aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEpIGV2ZW50dWFsbHkg
Z2V0cyBCYXNlbGluZSBDb2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgLy8gNi4gKEIp
IGdldHMgT1NSIGV4aXQuIChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0cnVjdHVyZVN0dWJJ
bmZvIGluIChBKSBmb3IgUHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3ZhbCkuIEJ1dCBpdCBk
b2VzIG5vdCBleGlzdCBzaW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQgb25jZS4KLSAgICAg
ICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5maW5kQnlWYWxJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBieVZhbEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4o
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gc3R1
YkluZm8tPmRvbmVMb2NhdGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmdQaGFzZS5jcHAKaW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0NmVjNzkyZDUwZDhm
ZDU4YS4uMWY0MTgzMThhNGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJkMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFzcyBPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3Rh
dHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAg
Y2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKQEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3MgT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0
eXBlIGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
dCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVl
IGhhcyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRl
dmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShu
dWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwor
ICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYxNSw3ICsyNjEzLDcg
QEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5
U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQxZGZhODVhYjUzMjYy
ZWNlODBmZTc0ZjIuLjg5ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3ODI1NzJmZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBjbGFzcyBQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgV2Vha01h
cFNldDoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRi
OWM5YTVhMjAuLmQ1NDk2NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZmOTgxYTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNTksNyAr
MzU5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZTMyNDdm
OGM2OTI2ZDI5N2I2Y2EyY2YxNGUyZDZiNWQ5OTNlYjZiLi42MDNmZjdiMmU1MmRjZWVlM2JjMzY1
ZGJjNGVlMzNiM2MzN2UxZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2Fs
bExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRl
clB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3
OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uZDQ1NWNhNGU2OGU0NzBiZDRiOTZiZTBhZTFhOTAyOWQ3
YmVhY2VhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCkBAIC0zMTc3LDM0ICszMTc3LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgp
ID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5vcCgpKTsKLQotICAgICAgICAgICAgaWYgKGNoaWxk
MS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JDZWxsV2l0aFN0cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5z
KG5vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQo
KSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQo
KSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckNlbGxXaXRoU3RyaW5nKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVz
ZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yQ2VsbFdpdGhTeW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcyKHRoaXMsIGNoaWxkMik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0
aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIo
KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOworICAgICAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlW
YWxEaXJlY3QpCisgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1v
ZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRp
b25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
ZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAg
ICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBjaGlsZDEpOwotICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGlsZDIpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMyh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcx
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVj
dE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIs
IGFyZzNHUFIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBjaGlsZDIsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1
YkluZm87CisgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Cisg
ICAgICAgICAgICAgICAgc3R1YkluZm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGNoaWxkMik7CisgICAgICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgY2hpbGQzKTsKKworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAg
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbm9kZS0+ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIElu
dmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAg
ICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
CisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICAgICAgICAgIGF1dG8gb3BlcmF0
aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9qaXQuYWRkUHV0QnlWYWwoZ2VuLCBzbG93
UGF0aC5nZXQoKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7CisKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01ODcxLDcgKzU5MzEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6
CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAKaW5kZXggYjkwNjY1ZWNjZTUyYzU3ZjQ0YjcwZDQ2N2M0YTRlNWE1ZjM3MDJlMC4uOTdi
YjZlMDg2OTkzNTIzYzI5ZTFlMTEwYTIwNDM4MDI5YTBkMjdkMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAKQEAgLTIzMyw2ICsyMzMsMTUgQEAgY2xhc3MgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFy
cmF5OgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OiB7CisgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDApOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1
dEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkgJiYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8
fCBjaGlsZDEudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zaWRlckJhcnJpZXIoY2hpbGQxLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czoKICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAx
MDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQy
NGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApA
QCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAh
PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4
YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4
YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFl
NjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3
YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxM
aW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQ
dXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNk
MjRkYWU4ZWY3MTAwLi4xYjBlZjM5YzU1MTEyMTgyNTk1OTc2OGYxNDlkZjBkODZmOWZhZDQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0x
NjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNo
ZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNTU1Niw1NyArNTU1NiwxNTUgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAgICAgICAg
Y2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKLSAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAg
ICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdENlbGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nTm9uU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
Q2VsbFN0cmluZ1N0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJp
bmdOb25TdHJpY3Q7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250
YWlucyhtX25vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVz
ZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51
c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlv
bl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxs
U3RyaW5nU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaW5nTm9uU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3RyaW5nKGNoaWxkMiks
IGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9w
ZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dT
dHJpbmcoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIu
dXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2Rl
LT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0OworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9p
ZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSks
IGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxv
d0NlbGwoY2hpbGQxKSwgbG93U3ltYm9sKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOwotICAgICAg
ICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAg
ICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbERpcmVjdE5vblN0cmljdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdDsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0OworICAgICAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOwor
ICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RT
dHJpY3Q7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2Rl
KCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICAg
ICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAg
ICAgICAgICAgICAgICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxv
d0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAg
IFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxvd0pTVmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShj
aGlsZDMpKTsKKworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKworICAgICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGNoaWxkMSk7CisgICAgICAgICAgICBMVmFsdWUgcHJv
cGVydHkgPSBsb3dKU1ZhbHVlKGNoaWxkMiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoY2hpbGQyKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShjaGlsZDMpOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3RyaW5n
ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIHByb3BlcnR5SXNJbnQzMiA9IGZhbHNlOworICAg
ICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3ltYm9sID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
YWJzdHJhY3RWYWx1ZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0
VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgcHJv
cGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUo
Y2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CisKKyAgICAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIocHJvcGVydHkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lz
dGVyKHZhbHVlKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX25vdENlbGxNYXNr
LCBWYWx1ZVJlcDo6bGF0ZVJlZyhHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKSk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9udW1iZXJUYWcsIFZhbHVlUmVwOjpsYXRlUmVn
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6RlRMSklUKSA/IDEgOiAwOworCisgICAgICAgICAgICBSZWZQdHI8UGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9m
dGxTdGF0ZTsKKyAgICAgICAgICAgIENvZGVPcmlnaW4gbm9kZVNlbWFudGljT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX25v
ZGUtPmVjbWFNb2RlKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbV9ub2RlLT5vcCgp
ID09IFB1dEJ5VmFsRGlyZWN0OworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2lucy0+YWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChub2RlU2VtYW50aWNPcmlnaW4pOworCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAg
ICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPSBleGNl
cHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBleGl0IGZvciBjYWxsIElDJ3MgY3JlYXRl
ZCBieSB0aGUgSUMgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAv
LyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2ls
bCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0
ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENy
ZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gcGFyYW1zWzJdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdw
U2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgICAgICAgICBhdXRvIGdlbmVy
YXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdp
biwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRH
UFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHByb3BlcnR5SXNTdHJpbmc7CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSBwcm9wZXJ0eUlzSW50
MzI7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gcHJvcGVydHlJc1N5bWJvbDsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwg
ZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRo
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1Bh
dGhDYWxsOworICAgICAgICAgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwg
bm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
U2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24sIEludmFsaWRHUFJSZWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNl
bWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3It
PnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJl
cG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZl
ciwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtODk1MSw3ICs5MDQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0
YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xk
U3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xk
U3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CkBAIC04OTY2LDE2ICs5MDY0LDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFy
aWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwor
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyArOTA4NSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3Jh
Z2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFu
dDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3
ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1
YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9E
U0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3Rz
KGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUg
IlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYw
NGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0
YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNy
byhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1
bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2Vs
ZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0
QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1h
Y3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAog
ICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBl
ZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7
CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAg
bV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJ
ZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJ
ZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09
IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJ
ZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2lu
QnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5z
dGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6
ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDZjNGYxMWY2OGU5
MDNlYmE2N2M2ZDdlYTkzODdkODFiNDU2YWUwZjUuLjZjMzRhYzY3M2EyODJjODhiYTFlYmNmYzRh
Y2UxODU1ZmEwMjM4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5
VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFs
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVX
aXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVC
bG9jayk7CkBAIC0yNjcsMTYgKzI0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGxpbmsoKTsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZh
bFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNo
ZWFibGVJZGVudGlmaWVyKTsKLQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0
ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxl
SWRlbnRpZmllcik7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKLQogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTM4MiwzOCArMzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVj
b2RlKTsKIAogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJy
YXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3Bl
Y2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0gICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUg
Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAgICAgLy8gUHJv
cGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVj
aW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRl
ZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCi0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQu
IEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAg
ICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMyU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbywgRG91YmxlU2hhcGUpOwotICAgICAg
ICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0
Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRH
ZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwot
ICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlz
dCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hh
cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbElu
Zm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFs
SW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlwZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0x
MDY0LDYgKzEwMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5
VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhUaGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0
QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAgICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4g
bV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklUSW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFs
czsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRHZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0x
MDkxLDYgKzEwMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRC
eVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVgg
fTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAg
IHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQg
bV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhh
MWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4uYTRiYjhmOGJkZDA3NjhiYWM5MzlhODI3ZDU2
YjZiOWIyZDRjZDU1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50
aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRL
aW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5
cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNv
ZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5
SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKICAgICAgICAgLCBt
X2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAt
MzgxLDYgKzM4MSw0MyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiAgICAgICAgIG1fc3R1Yklu
Zm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAor
SklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0
eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHVi
SW5mb0dQUikKKyAgICA6IEJhc2UoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9iYXNlKGJhc2Up
CisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworCisgICAgbV9zdHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9h
ZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJlZ3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXls
b2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7
CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiA9IHN0dWJJbmZvR1BSOworICAgIG1fc3R1
YkluZm8tPm1fYXJyYXlQcm9maWxlR1BSID0gYXJyYXlQcm9maWxlR1BSOworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7Cisg
ICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJ
bmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJvcGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwor
dm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYgaml0KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0
Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZl
ciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBm
YXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5t
X2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9y
KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJbmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ss
IGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdp
c3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4
ZjdmYi4uMzVhNzdmOGU3Mzk2ZTQ2MjdlY2Q2ZTA4YzUwNDBjZDE0ZmU0NTc0MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApA
QCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBtX2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkK
LSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCkBAIC0xNDIsMTAgKzE0MCwzNyBAQCBj
bGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3Ig
ewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2
YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1vZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7
IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAgIFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xh
c3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1Ymxp
YzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFs
dWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAg
ICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1wOworICAgIH0KKworICAgIHZvaWQgZmluYWxp
emUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExp
bmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CisKK3ByaXZhdGU6CisgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1f
dmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKK307CisKIGNsYXNzIEpJVERl
bEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsK
ICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDE3YzI3ZmRjMWNkM2JmNjMyNmE0
M2I1ZmVmODFlNjBlNmNjNDdmMDIuLjY3ZTBiNzgzMDlhNDNmMmJiYjk5YTkxYjM2ODliOTI3YjI2
MmRiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC0zNTIsNiAr
MzUyLDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlCiAgICAgfQogfQogCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7Cisg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBsb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2Zp
bGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKKyAg
ICB9Cit9CisKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3Bl
Y2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7CiAgICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKQEAg
LTM2MiwyNCArMzcwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlT3V0T2ZC
b3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmkKICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk91dE9mQm91bmRzKCkpOwogfQog
Ci1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSog
cHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJvZmlsZVNhdyA9IFtdIChBcnJheU1vZGVzIGFy
cmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KSB7Ci0gICAgICAgIHJldHVybiBhcnJh
eU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7
Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9j
b2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVk
QXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2Rlcywg
RG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklURG91YmxlOwotICAgIGlmIChhcnJheVBy
b2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRJbnQz
MjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEFycmF5U3RvcmFnZVNoYXBl
KSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKLSAgICByZXR1cm4gSklUQ29udGln
dW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4ZDc3NWJlY2M3MWY4MTkyNGNiOTNjOTcuLjdm
ZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRhOTcxOWEyOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5m
by0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVy
KSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5v
dERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlL
aW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRy
X3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
LSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5k
OjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRy
X3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+
Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkK
LSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmpl
Y3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJl
Y3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VP
YmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6
OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJf
dCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQot
ICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVj
dCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9i
amVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6
QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0
ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9p
ZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYg
KHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwg
KnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAg
ICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRT
dHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlk
LCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05
MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRf
VU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAg
ICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwg
cHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlw
dCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2Rl
KQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQu
dHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRo
ID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
YnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBp
ZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2
YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEs
MzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFs
dWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9
CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQ
cm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJs
ZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZh
bEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZh
bHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAK
LXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwg
QnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRy
eUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAg
c3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBA
IHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5m
by0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5
UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBA
IHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNl
SW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5p
c1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hv
dWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5m
by0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0
eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9k
ZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2
bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAt
MTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAg
ICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0
aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVl
LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0
aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VW
YWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYg
c3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4
KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVj
dHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkp
IHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFy
cmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0
QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFy
cmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAg
ICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAg
ICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBwcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJ
bmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21l
IG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0
IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGlt
aXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUlu
Zm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjpp
c0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCks
IGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChz
dWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAo
c3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAg
ICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5k
ZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAg
ICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlW
YWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNv
ZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5
VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5
IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5m
by0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3Jp
cHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwo
KSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0
aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAg
ICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwo
KSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICBy
ZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJl
LCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6
Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRp
b25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9u
UmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3Jl
IHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAg
ICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNl
ZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMg
MTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAg
ICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQg
dXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVw
LgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZh
bE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVz
dWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2
ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlW
YWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7
Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2Jq
ZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsK
KworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01B
TW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1Zh
bHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUg
aWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7
CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlw
dCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
CisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFN
b2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwg
RUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJz
Y3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0
dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Cisg
ICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBB
dHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGpp
dEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlW
YWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+
aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAo
c3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
KSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBi
eVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGly
ZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0
aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRp
cmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZh
aWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5k
ZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBp
ZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYm
IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2Ug
aWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2Ny
aXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewotICAgICAgICAgICAgICAgIGlmIChieVZhbElu
Zm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAg
ICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwg
Y29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlW
YWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkg
YWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZv
LT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlw
dC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29k
ZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBi
YXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVp
Znkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisK
KyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRp
ZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQ
dXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBt
b3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAg
ICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdl
IHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2
ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQot
ICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291
bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2
ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAg
ICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsK
LSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2Rl
KSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmls
ZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5
VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBz
dWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1Mp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1
bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZl
ciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1
ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZh
bEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJl
dHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVj
dFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbElu
Zm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1
YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9u
UHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7
CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlw
dCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
Ci0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUs
IGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c2xvcHB5KCkpOwogfQogCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLUpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisg
ICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxP
YmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0
cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKK30KKworSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJv
bG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCiAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNW
YWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5m
bywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAg
ICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNj
cmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9m
aWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9w
ZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUp
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3Jp
cHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVj
dCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1v
ZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAyNTg0ZTk5NWU0NjZkZTk0YTliMjAzMjdiMGVj
NDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0YmU4M2UwNmJlMDYyNTdiZmMyOWNjNDYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsy
MDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZh
bEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZv
KiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9k
ZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNN
QU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5
UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVBy
b2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwg
QXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxp
bmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCos
IENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKaW5kZXggM2QxZDg0ZmM4MjAyYmY4ODliZGYyMGVhMzM4ZGY4YTkxMTA5
MDYzYi4uNTY5NDkzMDVhMzU1ZmE5MWU1YTM1YWJmMTUyOGQ3NzUxM2QwYWU1OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCwx
NzggKzQzOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29k
ZUluZGV4KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudElu
dChwcm9wZXJ0eSk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQotICAg
ICAgICBtb3ZlKEltbTMyKGdldE9wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7
Ci0gICAgZWxzZQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocHJvZmlsZSksIHJlZ1QzKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleDsKLSAgICBpZiAoIXByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KSB7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBi
cmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNz
KCZieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwotICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1QxKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBT
ZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgotICAgICAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQo
cmVnVDEsIHJlZ1QxKTsKLSAgICB9Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOwogCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQg
ZG8gdGhpcyBpbmxpbmU/Ci0gICAgbG9hZDgoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJy
YXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2Rl
KSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0
QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsK
KyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwg
ZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
KQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAg
IGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZi
eVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0g
ICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5n
U2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRl
eGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQz
MihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsK
LSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7
Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0
b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwot
ICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3Jl
VG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICBy
ZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExp
c3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkp
OwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRU
eXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29y
cmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlT
dG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7
Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQot
ICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdy
aXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0g
ICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNl
czsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgpAQCAtNjYyLDEyICs1MTcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0
byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYg
KGlzRGlyZWN0KQpAQCAtNjc1LDQ4ICs1MzMsNDAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5k
IG5vdCBjbG9iYmVyZWQuCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgLy8gVGhl
eSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgorICAg
IC8vIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIC8vIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gcmVnVDI7CisgICAgLy8gY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLQotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFy
Z3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50
R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1Owot
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFs
SW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFs
dWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7CisgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3Bl
cmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNzMxLDI0ICs1ODEsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXQKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIwOwotICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQ
UiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFy
Z3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCisgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRH
UFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwog
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAot
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
KT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJ
bmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGpp
dC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1
bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25Q
dHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsKIApAQCAtODEwLDEzICs2NTksMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFy
Z3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihi
eVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQu
dmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUyLDE0ICs3MDEsMTQgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1
bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxP
YmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBw
dXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCkBAIC0zMjkxLDgyICsz
MTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNl
bGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3Jp
dGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2Ug
SklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIp
OwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJh
eVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUp
KQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRl
Y29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJy
YXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5
cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8t
PnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJ
bmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbElu
Zm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAg
ICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4
ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3Qo
KS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29s
IGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2Vs
aW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAg
ICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3Zh
bF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZv
LT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFn
PihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVz
cykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQot
fQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xh
dGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdv
IGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBs
YXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJ
VEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKQEAgLTM0MDgsMjIzICszMTgx
LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQo
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2lu
ZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NF
UlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpv
cGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFs
V2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywg
c2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ss
IExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2Vw
dGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9u
Q2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBh
dXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxs
ZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRl
LmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNh
bGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdl
bi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBw
dXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3Qi
IDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlW
YWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25v
dEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJ
bmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZv
LT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
R2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBm
cm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28g
d2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4K
LXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9w
UHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJs
ZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxX
aXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFy
cmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSBy
ZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVy
SUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJl
Z1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklE
IHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsK
LSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRl
U2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
LSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAg
YXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3Rl
ZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVt
cChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlw
ZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
MzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5
VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5
UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsK
LSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2Vu
ZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBp
biBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0
aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwg
bGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFt
cGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAg
ICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5k
cyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhm
ZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNj
cmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0gICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwg
ZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOwotICAgICAgICB0
b29CaWcubGluayh0aGlzKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5
U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQubGluayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkg
ewotICAgIGNhc2UgMToKLSAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxh
dGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNo
LCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAg
ICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0
eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENS
QVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAg
ICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3Rl
cklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdU
MzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBs
YXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7
Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlT
Y3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAg
IFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8p
IHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJs
eVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAg
ICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1
bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RU
eXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0
eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAg
ICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIp
OwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwot
ICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMy
KGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBm
cFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0
aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRj
aCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1v
dmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlz
KTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gp
OwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwot
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVt
cCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxh
dGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAg
Ci0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlf
dmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0
byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlv
bmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0
Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJl
Z1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0
ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4
IGU4MjY5ZmQxZTE5OWYxNTI0ODRlYjQ0ZGRlZjJhYWQxNzc4MjMyZmEuLjhiYTEwZTQzZWE2ZTU1
OGE1N2JmZmNlYmE5M2U0ZmRjMDllYjI4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDY2LDE1MSArNDY2LDI2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29k
ZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0
eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwot
ICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QxKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdl
IHNob3VsZCBkbyB0aGlzIGlubGluZT8KLSAgICBsb2FkOChBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsK
LSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0gICAg
Ci0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAg
c3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91
YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihDb250
aWd1b3VzU2hhcGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJl
bCgpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN3aXRjaCAoaW5k
ZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJh
c2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAg
ICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0
b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QyLCByZWdUMyk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTog
ewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDEpOwotICAgICAg
ICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50
c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAg
ICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLSAgICAKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2Zp
bGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CisgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJv
cGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUNik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1Q2LCByZWdUNyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFn
ZVNoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1
ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOworICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5j
aDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgIAotICAgIExh
YmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDAp
OwotICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJ
bmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKLSAg
ICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVt
aXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIs
IEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIs
IHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
Ci0gICAgCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIHJldHVybiBzbG93Q2Fz
ZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNjIwLDEy
ICs0OTUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFN
b2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51
bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1v
ZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTYzMywy
MSArNTExLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBs
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCisKKyAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24g
YmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAg
Ly8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1p
dExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMs
IHJlZ1QwKTsKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVn
VDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIo
ZWNtYU1vZGUudmFsdWUoKSkpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0g
Y2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1Qy
LCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCBy
ZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmEx
MzQ1ZjY5NzgwMDk2NDQuLjRiNzFhMGZhOWZkOTkwMzEzY2E0YWI3OWQxOTQzZjhjODFkN2YyNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQg
QEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0
aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVy
dHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xv
dCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewotICAgIHN3aXRjaCAo
cHV0S2luZCkgewotICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAg
IEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5l
cmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJp
YzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ugd2luIHBvcnQgY29t
cGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlk
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpIC0+
IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCitzdGF0aWMg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlk
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5k
LCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NFUlQoc2xvdC5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAg
ICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAg
ICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90
LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgewor
ICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1ha2Ug
d2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQg
cHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDggKzcy
Myw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJ
bmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJ
ZFNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQs
IHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxv
Y2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlB
ZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJp
Y3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3Bl
cnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0
ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBs
YWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBs
YWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2LDEwNiBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAotICAgIGlmICh0
cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAg
aWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xk
U3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEJ5S2luZCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQz
MigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisg
ICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisKKyAgICAgICAgSlNDZWxsKiBiYXNl
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
YWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSkt
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5
cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhN
RTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisg
ICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1Vp
bnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFz
azsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2Fz
ZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
c3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQu
Z2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRC
eVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZp
ZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAg
ICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJs
b2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZl
VXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5
VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVB
cnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1Yklu
Zm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUp
CkBAIC05ODYsNyArMTEyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUlu
QnkoCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsK
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzU2
LDI4ICsxODkxLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQogfQogCi12b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5nIEZ1bmN0aW9u
VHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwot
ICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxG
dW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwot
ICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0g
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAoa2luZCkgewor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9
IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOworICAgICAg
ICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVu
Y3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDog
eworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQo
Y29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdl
bmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIHN3aXRj
aCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vz
czo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJlc2V0RGVsQnko
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlL
aW5kIGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMxOWYwMmQ0ZDQw
MTk1ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRk
NDhjZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC00Myw2
ICs0MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5hbWVCeUlkLAog
fTsKIAorZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCit9Owor
CiBlbnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApAQCAtNTYsNyAr
NjEsOCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZh
bChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRl
eCwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoUHV0
QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2Jq
ZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQs
IFB1dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9p
ZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZp
ZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBA
QCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxp
bmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2
b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQp
Owotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3Zv
aWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7
CiB2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtp
bmQpOwogdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5
S2luZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNi
Li43MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcg
KzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9m
IGFsaWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0
aGVyZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5j
cHApCisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFu
ZCBQdXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0
aW5nIHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBp
bXBsZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhp
cwogLy8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436423</attachid>
            <date>2021-08-25 14:05:33 -0700</date>
            <delta_ts>2021-08-25 14:47:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210825140533.patch</filename>
            <type>text/plain</type>
            <size>346312</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi5iZGMxYjY1NGMzZDUzN2Ey
YjBiNGMwZDNlNWJlOWZiYjQwNTI1N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyODEgQEAKKzIwMjEtMDgtMjUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIFB1dEJ5
VmFsIElDIHRvIG1vZGVybiBzdHlsZS4gVGhpcyBwb2x5bW9ycGhpYyBQdXRCeVZhbCBjYW4gaGFu
ZGxlIG11bHRpcGxlIGFycmF5IHR5cGVzIGFuZCBtdWx0aXBsZSBpZGVudGlmaWVycy4KKyAgICAg
ICAgQWxzbywgdGhpcyByZW1vdmVzIGFkaG9jIElDIGNvZGUgaW4gQmFzZWxpbmUgc28gdGhhdCBp
dCBwYXZlcyB0aGUgd2F5IHRvIHVubGlua2VkIEJhc2VsaW5lIEpJVCBieSBjbGVhbmluZyB1cCBJ
Qy4KKworICAgICAgICBTZXZlcmFsIGludGVyZXN0aW5nIHBvaW50cyBvZiB0aGUgZGVzaWduLgor
CisgICAgICAgIDEuIFdlIG5lZWQgdG8gcGFzcyBBcnJheVByb2ZpbGUqIHZpYSBHUFJSZWcgdG8g
SUMgc2luY2Ugd2UgbmVlZCB0byBwcm9maWxlIG1heVN0b3JlVG9Ib2xlLCB3aGljaCBpcyBzdGls
bCBpbXBvcnRhbnQgdG8gYXZvaWQgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgMi4gVHJhbnNpdGlv
biAvIFJlcGxhY2UgSUMgbmVlZCB0byByZWNvcmQgcHJvcGVydHlSZWdzIGlmIGl0IGV4aXN0cyBu
b3QgdG8gY2xvYmJlciB0aGVzZSByZWdpc3RlcnMuIFRoaXMgaXMgaW1wb3J0YW50IGluIERGRyAv
IEZUTCBzaW5jZQorICAgICAgICAgICBJQyBzaG91bGQgbm90IGNsb2JiZXIgdGhlc2UgcmVnaXN0
ZXJzIHVubGVzcyBpdCBpcyBmbHVzaGVkLiBJdCBhbHNvIG1ha2VzIEJhc2VsaW5lIGNvZGUgc21h
bGxlciBzaW5jZSB3ZSBkbyBub3QgcmVsb2FkIHRoZW0gaW4gdGhlIHNsb3cgcGF0aCBjYWxsLgor
ICAgICAgICAzLiBBZGRlZCBhIHBhdGggZm9sZGluZyBTdHJpbmcvU3ltYm9sIHdoZW4gZW1pdHRp
bmcgUHV0QnlWYWwgaW4gREZHIC8gRlRMLiBUaGlzIGVkZ2UtY2FzZSBpcyBmb3VuZCB2aWEgYSBt
aWNyb2JlbmNobWFyay4gTGV0J3MgY29uc2lkZXIgdGhlIGNhc2U6IG9uZQorICAgICAgICAgICBw
dXRfYnlfdmFsIHNpdGUgaGFzIG9uZSBpZGVudGlmaWVyICJmb28iLCBidXQgaXQgaGFzIHNvIG1h
bnkgZGlmZmVyZW50IFN0cnVjdHVyZXMuIFByZXZpb3VzbHksIHdlIGVtaXQgSklUUHV0QnlJZEdl
bmVyYXRvciBhZGhvY2x5LCBhbmQgc3RpbGwgd2UKKyAgICAgICAgICAgY2FjaGUgdGhpcyAiZm9v
IiBpZGVudGlmaWVyIGluIGNhY2hlZElkLiBJbiBERkcgLyBGVEwsIHdoaWxlIHdlIGNhbm5vdCBt
YWtlIGl0IFB1dEJ5T2Zmc2V0LCB3ZSBjYW4gZW1pdCBQdXRCeUlkIHNpbmNlIHdlIGtub3cgdGhh
dCBpZGVudGlmaWVyIGlzCisgICAgICAgICAgIGFsd2F5cyAiZm9vIi4gQnV0IGFmdGVyIHRoaXMg
cGF0Y2gncyBjaGFuZ2UsIHN1Y2ggYSBzaXRlIGJlY29tZXMgc2xvdy1wYXRoLiBBbmQgdGhlbiB0
aGlzIGlkZW50aWZpZXIgaW5mb3JtYXRpb24gaXMgbWlzc2VkLCBhbmQgd2Ugd2VyZSBlbWl0dGlu
ZworICAgICAgICAgICBQdXRCeVZhbCBmb3IgdGhhdC4gRm9yIG5vdywgd2UgYXR0ZW1wdCB0byBm
b2xkIHRvIG9uZSBpZGVudGlmaWVyIGluIERGR0J5dGVDb2RlUGFyc2VyIHNvIHRoYXQgd2UgY2Fu
IHN0aWxsIGF0dGVtcHQgdG8gbWFrZSBpdCBQdXRCeUlkLCB3aGljaAorICAgICAgICAgICBjYW4g
YmUgUHV0QnlPZmZzZXQgaW4gY29uc3RhbnQgZm9sZGluZyBwaGFzZS4gV2Ugd291bGQgbGlrZSB0
byBoYW5kbGUgdGhpcyBvbmUgaWRlbnRpZmllciBzbG93LXBhdGggY2FzZSBpbiBQdXRCeVN0YXR1
cyAvIEdldEJ5U3RhdHVzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgICAgcGF0Y2guCisgICAgICAg
IDQuIE5vdywgREZHIE9TUiBleGl0IGRvZXMgbm90IHF1ZXJ5IHRvIEJ5VmFsSW5mbyBmb3Igc2V0
dGVyIGNhbGxzIHNpbmNlIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIHVzZSBTdHJ1Y3R1cmVTdHViSW5m
byBpbiBCYXNlbGluZS4KKworICAgICAgICBSZXN1bHRzIG9mIE1pY3JvYmVuY2htYXJrcyBsb29r
IGdvb2QuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkCisKKyAgICAgICAg
cHV0LWJ5LXZhbC1kaXJlY3QtbGFyZ2UtaW5kZXggICAgICAgICAgICAgICAgICA5NC42MjY1Ky0w
LjkwNzYgICAgICAgICAgIDkzLjQ1NTArLTAuNzEyMSAgICAgICAgICBtaWdodCBiZSAxLjAxMjV4
IGZhc3RlcgorICAgICAgICBpbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIzLjcxMzErLTAuMzI4MiAgICAgXiAgICAgMjIuNzY3OSstMC4xMTM3ICAgICAgICBeIGRlZmlu
aXRlbHkgMS4wNDE1eCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGln
aHRseS1wb2x5bW9ycGhpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjk4NTIrLTAuMDI4NCAgICAgICAgICAgIDEuOTU4MCstMC4wMjI0
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzOXggZmFzdGVyCisgICAgICAgIGdldC1hbmQtcHV0LWJ5
LXZhbC1kb3VibGUtaW5kZXgtZG9udC1mYWxsLW9mZi1hLWNsaWZmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODUuNDc2MistMC41NzM3ICAg
ICA/ICAgIDE4NS42MzI1Ky0wLjU4MTkgICAgICAgID8KKyAgICAgICAgcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZyAgICAgICAgICAgICAzMC45OTAzKy0wLjEyMDcgICAgICAgICAg
IDMwLjgwOTcrLTAuMTI4NQorICAgICAgICBwdXQtYnktdmFsLW1hY2hpbmUtaW50ICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjg4MDMrLTAuMDM4NCAgICAgICAgICAgIDEuODcwNystMC4wNDQw
CisgICAgICAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zm
c2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQuODQ2MystMC4xMTQ4ICAgICAgICAgICAgNC43ODM5Ky0wLjA1NDcgICAgICAgICAgbWln
aHQgYmUgMS4wMTMweCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBs
YWNlLWFuZC10cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDguODczMCstMS41OTM0ICAgICBeICAgICAgNi4yMjc2Ky0wLjA1
ODUgICAgICAgIF4gZGVmaW5pdGVseSAxLjQyNDh4IGZhc3RlcgorICAgICAgICBmb2xkLXB1dC1i
eS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjgxODMrLTAuMDg0MSAg
ICAgPyAgICAgIDQuODIzMystMC4wODkyICAgICAgICA/CisgICAgICAgIHB1dC1ieS12YWwtZGly
ZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjg0NSstMC4wMDkxICAgICA/ICAg
ICAgMC4yOTAxKy0wLjAwODggICAgICAgID8gbWlnaHQgYmUgMS4wMTk2eCBzbG93ZXIKKyAgICAg
ICAgcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuMzUyNyst
MC4wNjg2ICAgICA/ICAgICAgNi4zOTMzKy0wLjA5NjEgICAgICAgID8KKyAgICAgICAgcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgOS4zNTU2Ky0zLjE0MjEg
ICAgICAgICAgICA3LjE1MDkrLTAuMTAxOSAgICAgICAgICBtaWdodCBiZSAxLjMwODN4IGZhc3Rl
cgorICAgICAgICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
MDA1MistMC4wMzA5ICAgICAgICAgICAgMS45NzgxKy0wLjAzOTcgICAgICAgICAgbWlnaHQgYmUg
MS4wMTM3eCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC1uZWdhdGl2ZS1hcnJheS1pbmRleCAg
ICAgICAgICAgICAgICAxNC45NTcyKy0wLjEyMjEgICAgIF4gICAgIDE0LjU2MzYrLTAuMTA0NCAg
ICAgICAgXiBkZWZpbml0ZWx5IDEuMDI3MHggZmFzdGVyCisgICAgICAgIHB1dC1ieS12YWwtd2l0
aC1zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgMTEuNjM0NSstNC4zMDQ4ICAgICBeICAg
ICAgNy4wOTE5Ky0wLjA5MTggICAgICAgIF4gZGVmaW5pdGVseSAxLjY0MDV4IGZhc3RlcgorICAg
ICAgICBwdXQtYnktdmFsLWxhcmdlLWluZGV4LWJsYW5rLWluZGV4aW5nLXR5cGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xNDI1Ky0w
LjExNjUgICAgICAgICAgICAzLjEyMzYrLTAuMDM3OAorICAgICAgICBpbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIzLjQ5MzIrLTAuMzE4NiAgICAgXiAgICAgMjIuODQ2
OSstMC4wODczICAgICAgICBeIGRlZmluaXRlbHkgMS4wMjgzeCBmYXN0ZXIKKyAgICAgICAgcG9s
eW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAzNi42MDQ2Ky0xLjY1
MTkgICAgIF4gICAgIDMwLjg1OTcrLTAuMTQ3NCAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTg2Mngg
ZmFzdGVyCisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIHNob3dlZCByb3VnaGx5IDAuMi0wLjMlIHBy
b2dyZXNzaW9uLgorCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgfCAgICAgICAg
ICAgICAgIHN1YnRlc3QgICAgICAgICAgICAgICAgfCAgICAgbXMgICAgICB8ICAgICBtcyAgICAg
IHwgIGIgLyBhICAgfCBwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3Zlcnkg
UmF0ZSkgfAorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHwgRWxtLVRvZG9NVkMg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwxMjEuOTE2NjY3ICAgfDEyMS45NTgzMzMgICB8MS4w
MDAzNDIgIHwgMC44NzY4MDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgfCBWdWVKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgICAgICAgfDI2LjI2
MzMzMyAgICB8MjYuMDA2NjY3ICAgIHwwLjk5MDIyNyAgfCAwLjI2Mzg2OCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IEVtYmVySlMtVG9kb01WQyAg
ICAgICAgICAgICAgICAgICAgICB8MTI3LjA4MDAwMCAgIHwxMjcuODY2NjY3ICAgfDEuMDA2MTkw
ICB8IDAuMDExNDk3IChzaWduaWZpY2FudCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgIHwgQmFja2JvbmVKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgIHw0OC45MjAwMDAg
ICAgfDQ5LjMxODMzMyAgICB8MS4wMDgxNDMgIHwgMC4wMDMzOTUgKHNpZ25pZmljYW50KSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBQcmVhY3QtVG9kb01WQyAgICAgICAg
ICAgICAgICAgICAgICAgfDE5LjgyODMzMyAgICB8MTkuODI4MzMzICAgIHwxLjAwMDAwMCAgfCAx
LjAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICB8IEFuZ3VsYXJKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgICB8MTM0LjAxMTY2NyAgIHwx
MzIuMDgwMDAwICAgfDAuOTg1NTg2ICB8IDAuMDAwMDAwIChzaWduaWZpY2FudCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgVmFuaWxsYS1FUzIwMTUtVG9kb01WQyAgICAg
ICAgICAgICAgIHw2My43MjY2NjcgICAgfDYzLjgzODMzMyAgICB8MS4wMDE3NTIgIHwgMC40MDg0
MDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBJ
bmZlcm5vLVRvZG9NVkMgICAgICAgICAgICAgICAgICAgICAgfDY1LjE1MzMzMyAgICB8NjMuNzUz
MzMzICAgIHwwLjk3ODUxMiAgfCAwLjAwMDAwMCAoc2lnbmlmaWNhbnQpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICB8IEZsaWdodC1Ub2RvTVZDICAgICAgICAgICAgICAgICAg
ICAgICB8NzguMTMzMzMzICAgIHw3OC43ODAwMDAgICAgfDEuMDA4Mjc2ICB8IDAuMDk3Nzk0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgQW5ndWxh
cjItVHlwZVNjcmlwdC1Ub2RvTVZDICAgICAgICAgIHw0MC40MTUwMDAgICAgfDQwLjEwMDAwMCAg
ICB8MC45OTIyMDYgIHwgMC4yODc2MzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgfCBWYW5pbGxhSlMtVG9kb01WQyAgICAgICAgICAgICAgICAgICAg
fDUxLjkzMTY2NyAgICB8NTIuNTAwMDAwICAgIHwxLjAxMDk0NCAgfCAwLjAwNDE0OSAoc2lnbmlm
aWNhbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IGpRdWVyeS1Ub2Rv
TVZDICAgICAgICAgICAgICAgICAgICAgICB8MjI2LjA1NjY2NyAgIHwyMjUuMDczMzMzICAgfDAu
OTk1NjUwICB8IDAuMDA3Nzk2IChzaWduaWZpY2FudCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgIHwgRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDICAgICAgICAgICAgICAgIHwzNDEu
MjEwMDAwICAgfDM0MC45NzgzMzMgICB8MC45OTkzMjEgIHwgMC42MjMzODYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBSZWFjdC1Ub2RvTVZDICAg
ICAgICAgICAgICAgICAgICAgICAgfDg3LjE5ODMzMyAgICB8ODYuODkzMzMzICAgIHwwLjk5NjUw
MiAgfCAwLjA0MjE4OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICB8IFJlYWN0LVJlZHV4LVRvZG9NVkMgICAgICAgICAgICAgICAgICB8MTQ2LjUwNjY2
NyAgIHwxNDUuOTU4MzMzICAgfDAuOTk2MjU3ICB8IDAuMDE4ODAxIChzaWduaWZpY2FudCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgVmFuaWxsYS1FUzIwMTUtQmFiZWwt
V2VicGFjay1Ub2RvTVZDIHw2MS40NTAwMDAgICAgfDYxLjg3MDAwMCAgICB8MS4wMDY4MzUgIHwg
MC4wMDAwNDkgKHNpZ25pZmljYW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBhIG1lYW4gPSAyNTQuODUxMTEKKyAgICAgICAg
YiBtZWFuID0gMjU1LjI1NzM1CisgICAgICAgIHBWYWx1ZSA9IDAuMTg1NjU2MTY1NgorICAgICAg
ICAoQmlnZ2VyIG1lYW5zIGFyZSBiZXR0ZXIuKQorICAgICAgICAxLjAwMiB0aW1lcyBiZXR0ZXIK
KyAgICAgICAgUmVzdWx0cyBBUkUgTk9UIHNpZ25pZmljYW50CisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6
S2V5KToKKyAgICAgICAgKEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRv
cj09KToKKyAgICAgICAgKEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0
b3I6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAg
KEpTQzo6QXJyYXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29k
ZS9JQ1N0YXR1c01hcC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OmdldFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVn
ZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFw
cGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVj
dHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3Rv
cmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0
QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBz
KToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRl
ZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNT
dGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRC
eVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpw
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9y
L0RTTC5yYjoKKyAgICAgICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAg
KEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVy
YXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFs
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxH
ZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3Nl
QXJyYXlNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbE9wdGltaXplKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6
CisgICAgICAgIChKU0M6OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
SklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeSk6CisgICAgICAg
IChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuaDoKKwogMjAyMS0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bCBzaG91bGQgbm90IGxvYWQgaW5kZXhpbmdUeXBlIHVubmVjZXNzYXJpbHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYWRkNmNiNDMyMjkyN2YyMjE1YTYzMmQzODkzYmRjOWMzODI1
ZmE3YS4uMzIzZDhhNDBlMWY2ZTIzZmNlMjdlZDdjMDhkYjUzMjQ3M2IyNmE1OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFF
RjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMx
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlT
dGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0
MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0
QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURG
Nzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxs
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsMTEgKzI4NjYs
MTEgQEAKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0
YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1
RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlT
dGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlW
YXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXRCeVZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJB
OUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdFJhY2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJl
ZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tl
ZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODY5NSwxMCAr
ODY5NSwxMCBAQAogCQkJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRp
dGlvbi5oICovLAogCQkJCTBGMTVDRDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3Mu
Y3BwICovLAogCQkJCTBGMTVDRDIxMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAq
LywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8s
Ci0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJ
CQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJ
CTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMy
OUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJMEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJl
Y29yZGVkU3RhdHVzZXMuY3BwICovLAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBS
ZWNvcmRlZFN0YXR1c2VzLmggKi8sCkBAIC0xMDUwNiw4ICsxMDUwNiw4IEBACiAJCQkJNzkxNjBE
QkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFC
NjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZE
RTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1
OWMzMDIwZC4uNzA3N2VmOWFlMzExNzZmNjM4NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dy
YW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2Rl
L1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAotYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRl
Y29kZS9QdXRCeVN0YXR1cy5jcHAKK2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0
ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCmluZGV4IGZhOGI2YjIyZTNhNGUyZGM5NTBjN2JiMjQ2
OTdlNjk4MjgwYzM1YjYuLjJjY2QzNTYzODMwNDlkNzhmYzI2OWJmMDU1YjJjMjExNmU0N2NiYzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAg
LTk5LDYgKzk5LDE5IEBAIFJlZjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlCiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NFN0b3JlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJvdG90eXBlQWNjZXNzQ2hh
aW4pOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMjcyLDYgKzI4NSwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrU2tpcHBpbmdDb25zdGFudElk
ZW50aWZpZXJDaGVjaygpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
IGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zMjYsNiArMzUyLDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJZGVudGlmaWVyTmFt
ZU1hdGNoKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0
cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRE
b3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTM3OCw2ICs0MTcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlD
aGVjaygpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJp
bmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQy
NSwxMSArNDc3LDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6bmVlZHNTY3JhdGNoRlBSKCkgY29uc3QK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTE1LDYgKzU4MCwxOSBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiB2bSwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTU2OSw2ICs2NDcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpk
b2VzQ2FsbHMoVk0mIHZtLCBWZWN0b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrSWZEb2VzQ2FsbHMp
IGNvbnMKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6
CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGRvZXNDYWxscyA9
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlcGxhY2U6CkBAIC02NTAsNiArNzQx
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhl
cikgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBv
dGhlci50eXBlKCkgPT0gdHlwZSgpOwogCiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7
CkBAIC05NjEsNiArMTA2NSw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAo
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xMDYwLDYgKzExNjYs
OCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CiAKQEAgLTExNDUsNiArMTI1Myw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5
UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQ
UlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIp
OworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BS
KTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtMTE5OSwx
NSArMTMwOSwxNCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAg
ICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5hbmQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIp
OwogCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOwotICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgaXNFbXB0eTsKLQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVSZWdzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkp
OwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQog
ICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAg
ICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAg
ICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCkBAIC0xMjI3LDE2ICsxMzM2LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRo
R3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91
bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BS
LCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5sb2Fk
VmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpT
VmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNo
SWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0Vt
cHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAg
ICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYK
QEAgLTEyNjIsMjEgKzEzNzEsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRj
aDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkgewog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdo
dCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAgICAg
ICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0Lmxv
YWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3Jh
dGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVy
czo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0g
ICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BS
LCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzk1LDI3MyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYg
IWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5r
KCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBv
cHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Cisg
ICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxk
IGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNoZWNr
IGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoVGVz
dDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRl
OworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAg
ICAgYXV0byBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVz
ZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhq
aXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3Bh
Y2UpOworICAgICAgICB9OworCisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1
bHQ7CisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7Cisg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3Rv
cmFnZVNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwor
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9F
eHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBz
Y3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKwor
ICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBl
IGV4cGVjdGVkU2hhcGU7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBl
ID0gSW50MzJTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3Vi
bGVTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGln
dW91c1NoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAg
IHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZh
bGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5v
dEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAg
ICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5s
aW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BS
LCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAg
ICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVk
Q29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQo
cHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1
ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0
ZUJhcnJpZXIgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKworICAgICAgICBpZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkg
ewogICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNF
bXB0eS5saW5rKCZqaXQpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkp
OworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJ
blZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpCZWxvdywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsK
KworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5r
KCZqaXQpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAh
ZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmso
JmppdCk7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRl
LmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQg
Y291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5s
b2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3Vi
bGVDYXNlID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgZG91YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyNlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92
ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCks
IHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQp
OworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNl
dCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgc2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBh
bGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3Mp
OworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAg
ICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYg
KHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAg
ICAgICBzY3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0
YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAg
ICAgICAgaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9F
eHRyYVNwYWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAg
ICAgICAgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAg
ICAgICAgICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
d09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7
CisgICAgICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
ZmYpKTsKKyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAg
ICAgY2xhbXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNP
bmUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJh
c2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAg
IEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0
LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4
OiB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
Lm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CkBAIC0xODk0LDggKzIyNjIsMTIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGlmIChzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSkK
KyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBp
ZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAg
YWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gSW52YWxpZEdQUlJlZzsKQEAgLTIwNTgsNiArMjQzMCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIGFsbG9j
YXRvci5sb2NrKGJhc2VHUFIpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAh
PSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9z
dHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJh
eVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKTsKICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uS2lu
ZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKQEAgLTIxODMsNiArMjU1
NywxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8g
YmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFy
dCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9k
eSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAg
ICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIg
KzI1ODMsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAg
ICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVp
bnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIy
ODQsNiArMjY4MCwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vz
c0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNl
IEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0
YTk2MjExMDUwODk5YmFkZmQ5YmUuLjU2M2ExNTUyYWU0MjE2NDQwNDZkMGFhNDFkMjNiNmFkZDVk
YjY1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApA
QCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJM
b2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAg
ICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAg
ICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwK
KyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAg
ICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAK
ICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CkBAIC0zNTMsMTIgKzM2NiwxMyBAQCBjbGFzcyBT
aGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgc3RydWN0IEtleSB7CiAgICAgICAgICAgICBLZXko
KSA9IGRlZmF1bHQ7CiAKLSAgICAgICAgICAgIEtleShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZh
bHVlR1BSLCBHUFJSZWcgZXh0cmFHUFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycywgUG9seW1vcnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkK
KyAgICAgICAgICAgIEtleShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcg
ZXh0cmFHUFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgUG9seW1vcnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSog
d3JhcHBlZCkKICAgICAgICAgICAgICAgICA6IG1fd3JhcHBlZCh3cmFwcGVkKQogICAgICAgICAg
ICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3ZhbHVlR1BS
KHZhbHVlR1BSKQogICAgICAgICAgICAgICAgICwgbV9leHRyYUdQUihleHRyYUdQUikKICAgICAg
ICAgICAgICAgICAsIG1fc3R1YkluZm9HUFIoc3R1YkluZm9HUFIpCisgICAgICAgICAgICAgICAg
LCBtX2FycmF5UHJvZmlsZUdQUihhcnJheVByb2ZpbGVHUFIpCiAgICAgICAgICAgICAgICAgLCBt
X3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKICAgICAgICAgICAgIHsgfQogCkBAIC0zNzUs
NiArMzg5LDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAgICAgICAg
ICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYg
YS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1f
c3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAgICYmIGEu
bV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAgICAgICAg
ICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAg
ICAgIH0KIApAQCAtMzgzLDYgKzM5OCw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAg
ICAgICAgICAgR1BSUmVnIG1fdmFsdWVHUFI7CiAgICAgICAgICAgICBHUFJSZWcgbV9leHRyYUdQ
UjsKICAgICAgICAgICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSOworICAgICAgICAgICAgR1BSUmVn
IG1fYXJyYXlQcm9maWxlR1BSOwogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0
ZXJzOwogICAgICAgICB9OwogCkBAIC00MTYsNiArNDMyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1
YlNldCB7CiAgICAgICAgICAgICAgICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVH
UFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgog
ICAgICAgICAgICAgICAgICAgICAmJiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BS
CisgICAgICAgICAgICAgICAgICAgICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5
UHJvZmlsZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBi
Lm1fdXNlZFJlZ2lzdGVycykgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9y
ZGVyaW5nIG9mIGNhc2VzIGRvZXMgbm90IG1hdHRlciBmb3Igc2hhcmluZyBjYXBhYmlsaXRpZXMu
CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSBzdWNj
ZXNzIHJhdGUgYnkgbWFraW5nIHRoaXMgY29tcGFyaXNvbiAvIGhhc2hpbmcgbm9uIG9yZGVyaW5n
IHNlbnNpdGl2ZS4KQEAgLTQ0NSw2ICs0NjIsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsK
ICAgICAgICAgR1BSUmVnIG1fdmFsdWVHUFI7CiAgICAgICAgIEdQUlJlZyBtX2V4dHJhR1BSOwog
ICAgICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUjsKKyAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9m
aWxlR1BSOwogICAgICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIGNv
bnN0IEZpeGVkVmVjdG9yPFJlZlB0cjxBY2Nlc3NDYXNlPj4mIG1fY2FzZXM7CiAgICAgICAgIGNv
bnN0IEZpeGVkVmVjdG9yPFN0cnVjdHVyZUlEPiYgbV93ZWFrU3RydWN0dXJlczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAppbmRleCA2ZGM3YjBlNTQ0
N2ZlMDYwZGJjYmQyNGQ5OTA5NzU2NTc5ZmM2NTc0Li45MWRhOGYzZWZmOTJmYzNhODk1NzBkNzVh
NGI5MTNiZDI2MzJjYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5oCkBAIC0yMDgsNiArMjA4LDkgQEAgY2xhc3MgQXJyYXlQcm9maWxlIHsKICAg
ICBBcnJheU1vZGVzKiBhZGRyZXNzT2ZBcnJheU1vZGVzKCkgeyByZXR1cm4gJm1fb2JzZXJ2ZWRB
cnJheU1vZGVzOyB9CiAgICAgYm9vbCogYWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVy
biAmbV9tYXlTdG9yZVRvSG9sZTsgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1h
eVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5UHJvZmlsZSwgbV9t
YXlTdG9yZVRvSG9sZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbGFz
dFNlZW5TdHJ1Y3R1cmVJRCk7IH0KKwogICAgIHZvaWQgc2V0T3V0T2ZCb3VuZHMoKSB7IG1fb3V0
T2ZCb3VuZHMgPSB0cnVlOyB9CiAgICAgYm9vbCogYWRkcmVzc09mT3V0T2ZCb3VuZHMoKSB7IHJl
dHVybiAmbV9vdXRPZkJvdW5kczsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCmluZGV4IDc2NzFk
ODdiMWVhNzQ5ZGMzNDU2Zjc3NjVhYzA2YzRhOGJjZmIyYjEuLmMwMjVhN2JmNjUxOTRiZGE0ZTgy
MTUxZDljYjNmMjk2NzhkYTkyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAKQEAgLTE0MSw2ICsxNDEs
OCBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHZXR0ZXIoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgY29ucwogICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBhbGxvY2F0b3IubG9j
ayhzY3JhdGNoR1BSKTsKIAogICAgIEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVn
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFw
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAppbmRleCBm
YTBhNmQ1MjNiN2FkMGRmODgyMTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAyNTk2YmY2
ZWE4ZmY5YThhNzJiNGRjMmExZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSUNTdGF0dXNNYXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlua1N0YXR1
czsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5CeVN0YXR1
czsKLWNsYXNzIFB1dEJ5SWRTdGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNzIERlbGV0
ZUJ5U3RhdHVzOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJbmZvOwpA
QCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3RhdHVzKiBj
YWxsU3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMgeyBudWxs
cHRyIH07CiAgICAgSW5CeVN0YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAgUHV0QnlJ
ZFN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBwdXRTdGF0
dXMgeyBudWxscHRyIH07CiAgICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7IG51bGxw
dHIgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5jcHAKaW5kZXggNDg0MTAxMzlkYzJmOGMwZDVjODBhMmZmOTA1YzNhYTZhMTM1ZGZiMi4u
YzFlYjJkNjlkMjc1NGUwNTFhODI1OWY2Mzc3ZTY0NzE0ZWVhZWU2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKQEAgLTIxNiw4ICsyMTYs
MTIgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3RlcihTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVRhZ0dQUik7CiAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8udmFsdWVUYWdHUFIpOwogI2Vu
ZGlmCisgICAgaWYgKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKQorICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEyZjMxZDkxMzEwYzNkMzhlMzNh
ZGQxZmZlNjYyNzVkOTExNC4uNDBkNmExZjlkYTU4MjUyMDU1NGFhYzM0ZWMxYTQ0ZTQyOWFmODY0
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCkBAIC00OTQsNiArNDk0LDggQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MK
ICNlbmRpZgogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlm
IChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAKICAgICBzdGF0ZS5z
Y3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC04MTAsNiAr
ODEyLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5l
cmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICAgICAgICAgICAgIHN0dWJJbmZvLnZh
bHVlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ucmVncy50aGlzR1BSLAogICAgICAgICAgICAg
c3R1YkluZm8ubV9zdHViSW5mb0dQUiwKKyAgICAgICAgICAgIHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8udXNlZFJlZ2lzdGVycywKICAgICAgICAgICAg
IGtleXMsCiAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlcywKQEAgLTg0Niw3ICs4NDksNyBAQCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkp
IHsKICAgICAgICAgaWYgKGNhbkJlU2hhcmVkKQotICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRT
dHVicy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBz
dHViSW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJ
bmZvR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CisgICAgICAgICAg
ICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5KHN0
dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHViSW5mby5yZWdzLnRoaXNHUFIs
IHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBzdHVi
SW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZp
bmlzaENvZGVHZW5lcmF0aW9uKFdURk1vdmUoc3R1YikpOwpAQCAtMTAyMiw2ICsxMDI1LDQ1IEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NU
eXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDoKICAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZERvdWJsZVN0
b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250
aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4
U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWFmYWI5ZDM5
YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5dGVjb2RlU3Ry
dWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0
dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNT
dGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIFB1dEJ5SWRT
dGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0g
ICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKLX0K
LQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92YXJpYW50cy5z
aHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0gcHJvZmlsZWRC
bG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAgICAvLyBXZSBh
cmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55IHBsYWNlIGZvciBgcHV0
X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlz
IGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0gICAgLy8gSUMg
aW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgotICAgIEFTU0VSVCghaW5z
dHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVjdHVyZUlEKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1
Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1f
bmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgewotICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKLSAgICAgICAg
Y29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zm
c2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRG
bGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0
YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9j
ayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKLSAgICBQdXRCeUlk
U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLy8gRU5B
QkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVTRURfUEFSQU0oZGlkRXhp
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxv
Y2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRT
aXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJ
bmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKLSAgICBpZiAoIWlz
SW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc3VtbWFy
eSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKLSAgICBjYXNl
IENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0
ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0gICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAKLSAgICBj
YXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAg
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwg
b2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBl
OjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUu
c3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICBy
ZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNz
Q2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVBy
b3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFu
dDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0g
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
b21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21w
dXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25T
ZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNv
bXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0
U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpU
YWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMg
PQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNj
ZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9j
aywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQ
dXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNl
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwot
ICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21W
YWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JT
ZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7
Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVz
Q29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVE
YXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0
YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0RmxhZyBkaWRFeGl0ID0g
aGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLQotICAg
IGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7Ci0gICAgICAg
IElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKLSAgICAgICAgCi0g
ICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJlc3VsdCkgLT4g
UHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2Rl
T3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxpbmVSZXN1bHQg
PSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGlu
ZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBj
YWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShy
ZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOwotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMu
c3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+
b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5v
cHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0
YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNl
bGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LCBjYWxs
RXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRL
aW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgaWYgKHNl
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0gICAgCi0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0Owot
ICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRb
aV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0g
R2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJl
Q2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1
dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAg
Ly8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJp
dmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMg
d2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQg
dG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCi0g
ICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFs
dWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0K
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
ciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwg
cmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRo
aXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0
Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhh
cyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcwotICAg
ICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUg
dGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAgICAgICAgICAgICAgICAv
LyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQg
dG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVh
dmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBp
biBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0
dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAgICAgICAgLy8gdHJ5aW5n
IHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRh
a2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdl
dHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAg
ICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVm
b3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAgLy8gdHJ1ZSwgd2Ugd2Fu
dCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAgIC8vIERvbid0IGNhY2hl
IHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBz
b21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAg
ICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgot
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFpc0Rp
cmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkp
OwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJl
IGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8u
Ci0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3Ry
dWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBBU1NF
UlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAgYm9vbCBkaWRBcHBlbmQg
PSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0gICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAgcmVzdWx0
LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIFB1
dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlmIChtX3N0YXRlID09IE1h
a2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChtX3N0YXRlICE9
IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQg
aSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ld
Lm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1Zl
cnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/
IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAg
ICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRC
eUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2
b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0
QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2
bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIG90aGVy
KQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAgICAgICp0aGlz
ID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAKLSAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgICp0aGlzID0gb3RoZXI7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIGlm
IChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3co
KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyIDog
b3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVy
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRh
a2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICByZXR1cm4gbWVyZ2VT
bG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQot
ewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZpbHRl
cklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBmb3IgKFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9u
VG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
LSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRp
b24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAg
ICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnBy
aW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFrZXND
YWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGUyNTJkYjY5
YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRGbGFnLmgiCi0jaW5jbHVk
ZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5j
bHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFZNOwotY2xhc3MgSlNH
bG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsK
LQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8vIEl0J3MgdW5jYWNoZWQg
c28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAg
ICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgotICAgICAg
ICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGgu
Ci0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBw
YXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9OwotICAgIAot
ICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUp
Ci0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUg
PT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMo
U3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkp
IHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93
UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQotICAgIHsKLSAgICAg
ICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6
OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAgIAotICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1
c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2VuZGlmCi0gICAgCi0gICAg
U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgCi0gICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9
Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9
Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtl
c1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXNDYWxs
cygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKLSAgICAK
LSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUo
KTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Ci0gICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0g
ICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAgCi0gICAgdm9pZCBmaWx0
ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotI2VuZGlm
Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBC
eXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICAKLSAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNocmlua1RvRml0
KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQs
IDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEzODcyNTUyMWYz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFu
dC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJIZWFwSW5saW5l
cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5SWRWYXJpYW50KCkKLXsK
LSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgbV9raW5kID0g
b3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7
Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbmRp
dGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9v
ZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgIG1fY2FsbExp
bmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0
YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQg
PSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBy
ZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJ
ZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9
IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwot
ICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICByZXN1bHQubV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50
OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBT
ZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3Rh
dHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50
OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1
cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNp
emUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0
dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50
OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChraW5kKCkg
IT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJU
KG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29s
ZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVj
dHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9uZXdTdHJ1Y3R1
cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25kaXRpb25TZXQg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2Nh
bGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJl
cygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246
Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJl
YWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlh
bnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwot
fQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFy
aWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgTm90
U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFT
U0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVy
Lm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0
aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7Ci0g
ICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAg
IGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0
aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1lcmdlZENv
bmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25T
ZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBT
ZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8
fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5r
U3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNl
dC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlmICghbWVy
Z2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNs
b3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAg
ICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgICAgICBtX2NhbGxMaW5r
U3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIAotICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFj
ZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwotICAgIEFTU0VSVChyZXBs
YWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5t
X29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7Ci0gICAg
QVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAgICBBU1NFUlQocmVwbGFj
ZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8vIFRoaXMgc29ydCBvZiBt
ZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFk
ZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdo
aWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNu
J3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0
aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAgIGlmIChyZWFsbG9jYXRl
c1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZXBsYWNl
Lm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3Ry
dWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgaWYgKG1fbmV3
U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7
Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkK
LXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQo
bV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRW
YXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4
dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIHN3
aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiPGVt
cHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZToKLSAg
ICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNv
bnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
IiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjoK
LSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChz
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29u
ZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9
ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlu
a1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzVhNzNhMmY4ZDRiNWU1
ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5kIHsKLSAgICAgICAgTm90
U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBTZXR0
ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAgICAgICAgOiBtX2tpbmQo
Tm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9u
ZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRWYXJp
YW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9y
PShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJl
cGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAg
IHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCi0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwotICAgIAotICAgIEtpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFj
ZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwot
ICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09
IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVj
dHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9s
ZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAg
ICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4VHJh
bnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29sIHdyaXRlc1N0cnVjdHVy
ZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwotICAgIGJv
b2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsg
fQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAo
aXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9J
bnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVy
cy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIENh
bGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdl
dCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmxhcHMoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRC
eUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0gICAgUHJvcGVy
dHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwotICAg
IFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0gICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MTViMDljOGE1ZTkxM2Q3N2VkZWI3M2U2ZjFkNjI1ZmMyZGYyZThlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApA
QCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5o
IgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlW
YXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92
YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OnNocmlua1RvRml0KCkK
K3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZt
KCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGNhc2Ug
b3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8gaGF2ZSBhIGNvZGUgcmV0
cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2YXRlX25hbWVgLgorICAg
ICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4g
ZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8gSUMgaW1wbGVtZW50ZWQg
Zm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
Tm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci0+aW1w
bCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVj
dHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisKKyAgICBTdHJ1Y3R1cmVJ
RCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CisgICAgaWYgKCFu
ZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgc3Ry
dWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAKKyAg
ICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICghKGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgK
KyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVj
dHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQor
UHV0QnlTdGF0dXM6OlB1dEJ5U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAgY2Fz
ZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgIG1fc3RhdGUgPSBOb0lu
Zm9ybWF0aW9uOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNp
bXBsZToKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8u
dG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIDogTGlrZWx5VGFrZXNTbG93UGF0
aDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQ
YXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0
aCA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogTWFrZXNDYWxsczsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZs
YWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
KQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAgVU5VU0VEX1BB
UkFNKGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkaWRFeGl0
KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAg
CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQgPSBjb21wdXRl
Rm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIGNh
bGxFeGl0U2l0ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0
ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURfUEFSQU0obWFwKTsK
KyAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0
ZURhdGEpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQoreworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwg
YmFzZWxpbmVCbG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7
Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNh
bGxFeGl0U2l0ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1
cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7CisgICAg
aWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhz
dW1tYXJ5LCAqc3R1YkluZm8pOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSgpKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0
dWJJbmZvKTsKKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVu
dGlmaWVyKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPQorICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUo
aWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCks
IG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6
OlN0dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5z
dHViOworICAgICAgICAKKyAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJv
dG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZpZXIo
KSwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVu
ZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNz
LnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlh
bnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZpZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJ
bmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3Rh
dHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJ
bmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVu
aXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCku
Y2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1
cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0
YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vzcy5p
ZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxl
eEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICB9Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4
dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZs
YWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJ
bmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFj
aykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7
CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYg
cmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5s
aW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5l
UmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywg
YmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsCisgICAgICAgICAgICAgICAgICAg
IGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdl
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1
cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+
b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5v
cHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMu
cHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVC
bG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURh
dGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50
aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgIGlmIChzZXQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAgICAKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0
YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgIAor
ICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsK
KworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOwor
ICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwor
ICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBXZSBj
YW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFt
ZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUg
cmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtl
IAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAg
ICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
V2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCBy
ZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhp
cyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRj
aHBvaW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFz
IHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAg
ICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0
aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8v
IEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0
byBoYXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2
ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50
aWZpZXIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVu
ZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExp
a2VseVRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4g
c2V0IG1vZGUgYW5kIGl0CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0
byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtl
CisgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRz
IGV4ZWN1dGVkLgorICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAg
ICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBC
ZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3
YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2Fj
aGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5
VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25k
cyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UK
KyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJp
bmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAg
IGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5k
LmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2Vs
eVRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIFdlIG9ubHkgb3B0
aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9u
IGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAgICAg
ICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF0cmFu
c2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1Bh
dGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAgICAg
ICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeVZhcmlhbnQ6OnRy
YW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQs
IG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0
LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIFB1
dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgor
ICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBNYWtlc0NhbGxzOgorICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2Fs
bHM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU2ltcGxlOiB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBp
ZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB9Cit9CisK
K1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYg
KG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMobWFrZXNDYWxscygpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBP
YnNlcnZlZFRha2VzU2xvd1BhdGgpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxz
KCkgPyBNYWtlc0NhbGxzIDogTGlrZWx5VGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlk
ZW50aWZpZXIgUHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBzaW5nbGVJZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUlt
cGwoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9
CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisg
ICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQg
UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0
QnlTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHV0QnlTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAg
ICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChvYnNlcnZlZFN0cnVj
dHVyZVN0dWJJbmZvU2xvd1BhdGgoKSB8fCBvdGhlci5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZv
U2xvd1BhdGgoKSkKKyAgICAgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2FsbHMo
KSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMg
OiBPYnNlcnZlZFRha2VzU2xvd1BhdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdGhp
cyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1h
a2VzQ2FsbHMgOiBMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICB9OworCisgICAgc3dpdGNoICht
X3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVy
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBp
ZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93
KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBv
dGhlci5tX3ZhcmlhbnRzKSB7CisgICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAg
ICBzaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTGlr
ZWx5VGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICBj
YXNlIE1ha2VzQ2FsbHM6CisgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoK
KyAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAg
ICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFy
aWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJp
YW50cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2
b2lkIFB1dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJp
bnQoIihOb0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaW1wbGU6
CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQu
cHJpbnQoIkxpa2VseVRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
T2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkVGFrZXNT
bG93UGF0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAg
ICBvdXQucHJpbnQoIk1ha2VzQ2FsbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2Jz
ZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiT2JzZXJ2ZWRT
bG93UGF0aEFuZE1ha2VzQ2FsbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iZmM0NjhhMjg2ZWI1ZmI3MWY5MTdiODA4NGNjZGNhMGY0YTIyOGIwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAg
LTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisj
aW5jbHVkZSAiRXhpdEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUg
IlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNs
dWRlICJTdHViSW5mb1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVC
bG9jazsKK2NsYXNzIFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7
CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBl
ZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBw
cm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgewor
ICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAg
ICAgIE5vSW5mb3JtYXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0
b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCB3aWxsIGxp
a2VseSB0YWtlIHRoZSBzbG93IHBhdGguCisgICAgICAgIExpa2VseVRha2VzU2xvd1BhdGgsCisg
ICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBzbG93IHBhdGguIFdlIGFsc28gb2JzZXJ2ZWQg
dGhhdCB0aGUgc2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAg
ICAgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtl
IHRoZSBzbG93IHBhdGggYW5kIHdpbGwgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscywK
KyAgICAgICAgLy8gSXQga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuIFdlIGFs
c28gb2JzZXJ2ZWQgdGhhdCB0aGUgc2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHVi
SW5mby4KKyAgICAgICAgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMsCisgICAgfTsKKyAg
ICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3RhdGUgc3RhdGUp
CisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAg
ICAgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBjYXNlIE9ic2Vy
dmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBQdXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
CisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6
IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFu
dCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Ym9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1
dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01h
cCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNp
ZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4pOworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9v
bCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9v
bCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkg
eworICAgICAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6CisgICAgICAgIGNhc2UgT2JzZXJ2
ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgYm9v
bCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25z
dDsKKyAgICBib29sIG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gT2Jz
ZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rv
cjxQdXRCeVZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7
IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIHNpbmdsZUlkZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJF
X1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAg
dm9pZCBtZXJnZShjb25zdCBQdXRCeVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0
YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsK
KyNlbmRpZgorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayosIEJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQ
dXRCeVZhcmlhbnQmKTsKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUg
bV9zdGF0ZTsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVZhcmlhbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwN2M1MzViMzc0MDQ4MTA5ZTY5YzkwYWQ4Yzlh
OWZmMjk0ODdjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJIZWFw
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUHV0QnlWYXJpYW50OjpQdXRCeVZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICA6IFB1dEJ5VmFyaWFudChvdGhlci5t
X2lkZW50aWZpZXIpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlWYXJpYW50JiBQ
dXRCeVZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAg
IG1fa2luZCA9IG90aGVyLm1fa2luZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xk
U3RydWN0dXJlOworICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKKyAgICBtX29mZnNldCA9
IG90aGVyLm1fb2Zmc2V0OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51
bGxwdHI7CisgICAgbV9pZGVudGlmaWVyID0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIHJldHVy
biAqdGhpczsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3Zl
KGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnRy
YW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJl
c3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9s
ZFN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Cisg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29m
ZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0
QnlWYXJpYW50OjpzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQo
V1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSogUHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJh
bnNpdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIp
OworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAg
ICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6Zml4VHJhbnNpdGlvblRv
UmVwbGFjZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5z
aXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVb
aV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKKyAg
ICBtX2tpbmQgPSBSZXBsYWNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Cit9
CisKK2Jvb2wgUHV0QnlWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICBjYXNlIFNldHRlcjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0
ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6
OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYgKCEh
bV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9pZGVudGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9p
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb2Zmc2V0ICE9
IG90aGVyLm1fb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFj
ZTogeworICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxh
Y2U6IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAg
ICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0
dXJlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgbmV3
VmFyaWFudCA9IG90aGVyOworICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVy
Z2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7CisgICAgICAgICAgICAgICAgKnRoaXMg
PSBuZXdWYXJpYW50OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgICAgICByZXR1cm4gYXR0
ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIpOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJl
ICE9IG90aGVyLm1fb2xkU3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1f
bmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9u
U2V0OworICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRo
KG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9u
U2V0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgU2V0dGVyOiB7CisgICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0g
U2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgeworICAgICAgICAg
ICAgaWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9u
U2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Cisg
ICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENv
bmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENv
bmRpdGlvblNldDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAg
ICAgICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMp
OworICAgICAgICAKKyAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1
Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQdXRC
eVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5
VmFyaWFudCYgcmVwbGFjZSkKK3sKKyAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwor
ICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKKyAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CisgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CisgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgIAorICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAorICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBh
bnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgorICAgIAorICAg
IGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0
cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fb2xkU3RydWN0dXJl
Lm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwo
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlWYXJpYW50KTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgIGlmIChtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpmaW5h
bGl6ZShWTSYgdm0pCit7CisgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5o
ZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5h
bGl6ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBk
dW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiPCIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmll
ciwgIicsICIpOworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAg
ICAgIG91dC5wcmludCgiZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiUmVwbGFjZTog
IiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0
KCksICIsICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFu
c2l0aW9uOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiVHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAorICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlNldHRlcjog
IiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOworICAgICAgICBvdXQucHJp
bnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9
ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeVZhcmlhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTQwMmI0MjU2YWRlN2UwNTY1MGE5ZmYw
ZjY4NDVlYzFiMzFlYjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5
T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDYWxsTGlua1N0YXR1czsKKworY2xhc3MgUHV0QnlWYXJpYW50IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBO
b3RTZXQsCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNl
dHRlcgorICAgIH07CisgICAgCisgICAgUHV0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllcikKKyAgICAgICAgOiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2Zmc2V0
KGludmFsaWRPZmZzZXQpCisgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAg
ICAgLCBtX2lkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICBQdXRCeVZhcmlh
bnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeVZhcmlhbnQmKTsKKworICAgIHN0YXRpYyBQdXRCeVZh
cmlhbnQgcmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCB0cmFuc2l0aW9u
KENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
LCBQcm9wZXJ0eU9mZnNldCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCBzZXR0ZXIo
Q2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPik7CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RT
ZXQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Cisg
ICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAg
ICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpCisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OworICAgIAor
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnko
KTsKKworICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3Q7CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAg
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQp
IGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIEludHJpbnNpYyBp
bnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQorCisgICAgLy8gVGhpcyBp
cyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBt
X29mZnNldDsKKyAgICB9CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAg
ICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBhdHRl
bXB0VG9NZXJnZShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKTsKKyAgICAKKyAgICBERUNMQVJF
X1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgYm9v
bCBvdmVybGFwcyhjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYg
KCEhbV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChtX2lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmICht
X2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3Zlcmxh
cHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGF0
dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVw
bGFjZSk7CisgICAgCisgICAgS2luZCBtX2tpbmQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CisgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9u
ZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bV9jb25kaXRpb25TZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2Nh
bGxMaW5rU3RhdHVzOworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKaW5kZXggMGM0YzA3NDdhMGFiODVmYjNhZjgxN2Qy
OTQ1ZDYyMWFkYzNlYmFkNy4uZmNlMGY0ZDhlZTEwZWRkYmNmM2M3NTRlZjgzM2EzNWJlOTdkYmMx
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcApAQCAtNjIsMTAgKzYyLDEwIEBAIEdldEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1
c2VzOjphZGRHZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLVB1dEJ5SWRTdGF0dXMqIFJlY29yZGVkU3RhdHVz
ZXM6OmFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3Qg
UHV0QnlJZFN0YXR1cyYgc3RhdHVzKQorUHV0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFk
ZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5U3Rh
dHVzJiBzdGF0dXMpCiB7Ci0gICAgYXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5SWRT
dGF0dXM+KHN0YXR1cyk7Ci0gICAgUHV0QnlJZFN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdl
dCgpOworICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeVN0YXR1cz4oc3RhdHVz
KTsKKyAgICBQdXRCeVN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOwogICAgIHB1dHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvZGVPcmlnaW4sIFdURk1vdmUoc3RhdHVzUHRyKSkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcHV0cykKKyAgICAgICAgcGFpci5zZWNv
bmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAo
YXV0byYgcGFpciA6IGRlbGV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuaAppbmRleCBiZDE1NzA1NDU3MzgwYzM3N2I4NDI4NmQ1M2Fh
ODY4YTMyNjMyNGI1Li45NDk4M2RiYzc2N2QwN2UyODA0YmQ0NDJjMzdlYjU0Y2Y0NTdiYThkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEZWxldGVCeVN0YXR1cy5oIgogI2luY2x1
ZGUgIkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiSW5CeVN0YXR1cy5oIgotI2luY2x1ZGUgIlB1
dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlNldFBy
aXZhdGVCcmFuZFN0YXR1cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAg
c3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBhZGRD
YWxsTGlua1N0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2FsbExpbmtTdGF0dXMmKTsK
ICAgICBHZXRCeVN0YXR1cyogYWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IEdldEJ5U3RhdHVzJik7Ci0gICAgUHV0QnlJZFN0YXR1cyogYWRkUHV0QnlJZFN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlJZFN0YXR1cyYpOworICAgIFB1dEJ5U3RhdHVzKiBh
ZGRQdXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlTdGF0dXMmKTsKICAg
ICBJbkJ5U3RhdHVzKiBhZGRJbkJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5
U3RhdHVzJik7CiAgICAgRGVsZXRlQnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mLCBjb25zdCBEZWxldGVCeVN0YXR1cyYpOwogICAgIENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzKiBhZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29u
c3QgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMmKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFJl
Y29yZGVkU3RhdHVzZXMgewogICAgIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPj4+IGNhbGxzOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPEdldEJ5U3RhdHVzPj4+IGdldHM7Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlJZFN0
YXR1cz4+PiBwdXRzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlx
dWVfcHRyPFB1dEJ5U3RhdHVzPj4+IHB1dHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3Jp
Z2luLCBzdGQ6OnVuaXF1ZV9wdHI8SW5CeVN0YXR1cz4+PiBpbnM7CiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8RGVsZXRlQnlTdGF0dXM+Pj4gZGVsZXRl
czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1cz4+PiBjaGVja1ByaXZhdGVCcmFuZHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA3
NTkxOGY2NzczMTgzY2RmY2ViMjNkYzNjYzIxZDMyN2U5ZmExODY4Li5mMjdiNzM3NGVmOWFlZTEw
N2E3MDE2ZGE4ODFiY2VkZjc4MTlkNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTI4MSw4ICsyODEsMTEgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGMKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lOgogICAgICAgICByZXNldEdldEJ5KGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5S2luZDo6UHJp
dmF0ZU5hbWUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKLSAg
ICAgICAgcmVzZXRQdXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlJZDoKKyAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtp
bmQ6OkJ5SWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKICAgICAgICAg
cmVzZXRJbkJ5KGNvZGVCbG9jaywgKnRoaXMsIEluQnlLaW5kOjpCeUlkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggNzMw
NGZiMTU0ZTg0MGQ4NWRhMjhlNmUyNTAxYWFiMThlNTVkNDFhNC4uZTY3YmMxMDhiZTMyMGRkNmQy
NTllNzdjODFiOWQ1MWM0NWNmNTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKQEAgLTU0LDcgKzU0LDggQEAgZW51bSBjbGFz
cyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeUlkRGlyZWN0LAogICAgIFRyeUdldEJ5
SWQsCiAgICAgR2V0QnlWYWwsCi0gICAgUHV0LAorICAgIFB1dEJ5SWQsCisgICAgUHV0QnlWYWws
CiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC0zNjUs
NiArMzY2LDcgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBHUFJSZWcgYnJh
bmRHUFI7CiAgICAgfSByZWdzOwogICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUiB7IEludmFsaWRHUFJSZWcgfTsK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUjsKICAgICAvLyBG
SVhNRTogWzMyLWJpdHNdIENoZWNrIGlmIFN0cnVjdHVyZVN0dWJJbmZvOjpiYXNlVGFnR1BSIGlz
IHVzZWQgc29tZXdoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAz
NTlkZDMwYzBjZTY4YzExYzE3YjI4MjEuLjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3
NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRl
ICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNs
dWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNp
bmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1
ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpA
QCAtMzk3Myw3ICszOTczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAg
IGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0g
Km1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAg
ICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0Vt
cHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAg
ICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1
cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwog
ICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1
cmUpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3
ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8v
IGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5h
ZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNl
KTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTQxNDAsMTAgKzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9z
dHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUt
Pm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJ
ZDsKICAgICAgICAgICAgIGF1dG8gcHJpdmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0g
UHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9kZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0
ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2
YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUt
PmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNo
ZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVs
ZFB1dEtpbmQpOwogCiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3
ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVj
dG9yIHRyYW5zaXRpb25zOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYy
LDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAg
ICAgIGlmICghYWxsR29vZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9u
cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CkBAIC00NDczLDcgKzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpAQCAtNDY1MiwxMCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czogeworICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1f
c3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCkt
PmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAg
IG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVy
ZVNldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRl
eCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgxNWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4
MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQw
Miw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYzZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNi
ZDYyN2IuLmQyNmNjMmE4MDA1M2Y1M2NkNDljYjI1MjNlZGE3OTg4MGEwMjE1ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3
ICszMyw2IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFu
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZh
bEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKQEAgLTc0LDcgKzczLDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdl
dHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJ
ZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3Rh
dHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSAr
MjM4LDExIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2Uo
SlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShO
b2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1
Y3R1cmVTZXQmKTsKICAgICAKLSAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFu
ZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBi
b3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJp
YW50VHlwZSYpOwogCi0gICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3Rv
cmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50Jiwg
Tm9kZSogdmFsdWUpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJz
ZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNz
IEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9k
ZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlk
U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9v
bCBpc0RpcmVjdCwgRUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2
YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29k
ZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2
YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVz
JiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQ
dXRCeVN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxl
dGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5
U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUg
cHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwg
b2YKICAgICAgICAgICAgICAgICAvLyB0aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAg
ICAgICAgIC8vIGhpbGFyaW91c2x5IHJhcmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2Ug
YXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8g
YXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1
c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAg
ICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUg
YmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiByaWdodCBub3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBt
b25vIHByb3RvLiBIb3dldmVyLCB0aGlzIHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRv
IGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1
Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpz
dG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBs
YWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZz
ZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0
KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkg
KzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdp
c3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1
cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0
dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAg
ICBpZiAoaXNEaXJlY3QpCiAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZv
KGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQot
ICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZs
dXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNl
LCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8g
UHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1v
ZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3Rh
dHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJ
bmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3Rh
dHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkg
ewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3Rh
dHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6
OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgp
KQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVj
bWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAg
IGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMo
KQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAo
IW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAg
ICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAg
ICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5
bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5
SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21h
TW9kZSk7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9u
czo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJp
YW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykg
ewotICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgp
ICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBpZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5k
KCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9k
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhd
LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAg
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwog
Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3Jp
Z2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAK
LSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0
dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZh
cmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50
cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZz
ZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAg
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFT
U0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFy
aWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFu
dC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwxMiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNl
KTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSks
IGJhc2UpOwogCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAg
ICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBl
bWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC01MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZp
bHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSks
IGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykp
LCBiYXNlKTsKIAogICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhl
ciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVk
VmFsdWUpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVl
LCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4
NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
IH0KICAgICAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3Rh
dHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5k
KQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAg
ICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1Np
bXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nl
c3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQ
cml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1
dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dy
YXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYg
KHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5t
X3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8
ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8
IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXpl
KCkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8o
aWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYg
KFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNv
bXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRv
R3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVk
U3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRT
dGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZv
ciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRz
KCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0
YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJl
IDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5t
X211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1
dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0
YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
Zmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8o
ZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBB
U1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7
Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpSZXBsYWNlOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0
KCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29k
ZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZp
bHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2Up
OwogICAgIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2
YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAt
NTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5h
bWVCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjog
ewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwg
cHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hl
Y2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0
cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29k
ZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGlu
ZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhh
dCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwg
d2UgbWlnaHQgaGF2ZSBzb21lIGluZm8gZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElD
LCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwgdGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90
IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAg
ICAgICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAg
ICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmll
ci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAg
ICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVy
LmNlbGwoKSk7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRUeXBlKQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVl
KSkgewogCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBP
cEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFj
aywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0
YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmln
aW4oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworCisgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAg
ICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlP
ZmZzZXQpCi0gICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29k
ZS5tX3B1dEtpbmQpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21w
aWxlQXNQdXRCeU9mZnNldCkKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVO
YW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5
LCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUp
OwpAQCAtNjU2NywxMiArNjU1NiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wg
ZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAg
ICAgICAgICAgUHV0QnlTdGF0dXMgcHV0QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRl
eHRTdGFjaywKLSAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRD
b2RlT3JpZ2luKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBi
eXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5
dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBp
ZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJO
dW1iZXIpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAK
LSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQ
dXRCeVN0YXR1cyBzdGF0dXM7CiAgICAgICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCksIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlk
U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0
QnlTdGF0dXMoUHV0QnlTdGF0dXM6Okxpa2VseVRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAg
ICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxCi0gICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAg
ICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29kZS5t
X3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODgxNCw2MiArODgwMyw3
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRl
Y29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgpCiB7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKICAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CiAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92
YWx1ZSk7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKICAgICBib29sIGNvbXBpbGVkQXNQdXRCeUlkID0gZmFsc2U7Ci0gICAg
ewotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7Ci0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgewotICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENv
ZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAvLyBG
SVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBK
SVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUs
IHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAg
ICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgJiYg
IWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50
KQotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJ
ZDsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwot
ICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBmcm96
ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CiAKKyAgICBQdXRC
eVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWND
b250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgaWYgKCFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVu
dCkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZh
bHVlKSkgeworICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3Rh
dHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAg
aWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5
KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1
aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcElu
Zm8odWlkKSwgcHJvcGVydHkpOworCisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JF
eGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1
dEJ5SWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cy50YWtlc1Nsb3dQYXRoKCkp
IHsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN0YXR1cyBpcyB0YWtpbmcgYSBzbG93IHBh
dGgsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBub2RlIHN0aWxsIGhhcyBjb25zdGFudCBpZGVu
dGlmaWVyIGFuZCB1c2luZyBQdXRCeUlkIGlzIGFsd2F5cyBiZXR0ZXIgaW4gdGhhdCBjYXNlLgor
ICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG51bGxwdHI7CisgICAgICAgICAg
ICBKU0NlbGwqIHByb3BlcnR5Q2VsbCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0byog
c3ltYm9sID0gcHJvcGVydHktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3ltYm9sKj4oKm1fdm0pKSB7
CisgICAgICAgICAgICAgICAgdWlkID0gJnN5bWJvbC0+dWlkKCk7CisgICAgICAgICAgICAgICAg
cHJvcGVydHlDZWxsID0gc3ltYm9sOworICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhzeW1ib2wpOworICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChhdXRvKiBzdHJpbmcgPSBwcm9wZXJ0eS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU1N0cmluZyo+KCptX3ZtKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBpbXBs
ID0gc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsgaW1wbC0+aXNBdG9tKCkgJiYgIXBhcnNlSW5k
ZXgoKmNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KGltcGwpKSkgeworICAgICAgICAgICAgICAgICAg
ICB1aWQgPSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlDZWxsID0gc3RyaW5nOworICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmZyZWV6ZVN0cm9uZyhzdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2Vy
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7Ci0KKyAgICAg
ICAgICAgIGlmICh1aWQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwo
cHJvcGVydHlDZWxsKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgaXNEaXJlY3Qs
IG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CisgICAgICAgICAgICAgICAgY29t
cGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAg
aWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewotICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0g
Z2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJy
YXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOwogCiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2Up
OwogICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgIGFkZFZhckFyZ0No
aWxkKHZhbHVlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIExlYXZlIHJv
b20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIp
OyAvLyBMZWF2ZSByb29tIGZvciBsZW5ndGguCi0gICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFsRGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8oYnl0ZWNvZGUubV9lY21hTW9kZSkpOworICAgICAgICBOb2Rl
KiBwdXRCeVZhbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFs
RGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oYnl0
ZWNvZGUubV9lY21hTW9kZSkpOwogICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBQdXRCeVZh
bCBhbmQgUHV0QnlWYWxEaXJlY3QgbXVzdCBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgY2xvYmJlciBl
eGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIHRoZW0gZ2VuZXJpYy4KKyAgICAg
ICAgaWYgKHN0YXR1cy5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAg
ICAgICAgIG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuYWRkKHB1dEJ5VmFsKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOTE2NDcwZDE3
ZDUzYWYzNTZiZDUxNDRjOTRlNjA3ZGEwNzk1OGI0YS4uNmYyMDRkMmM1ZGUwYTYxMmY3MzFjOTU3
YjQ2MWRjZjMwYzRhMTFhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKQEAgLTU2OSw3ICs1NjksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNh
c2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCmluZGV4IDg2YTNkMDc2NjRkN2ZhOTI3NTEy
OTk3NzlmNDZmMTk3MmIwYWQwZjMuLjRjZTlmZjBlYjVkYTUxMGVjMjM0MDY0NjJhNzFlODgwOTUw
OTYyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKaW5kZXggZWFlYWY4NWVhMjU0MTcyNTc1NWY0OGNlZmRlZGUwM2I4MWM5ZmEyYS4uYjg4
MjVhY2FlMzRlNTVmODkyNjU5MTI5ODQxZDkzMjRhNDBjMTYxNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVz
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIK
KyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUwMSw3ICs1MDEsNyBAQCBjbGFz
cyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAg
CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQub2xkU3RydWN0dXJlKCkuZ2VuZXJpY0ZpbHRlcihbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJl
KSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuY29u
dGFpbnMobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CkBAIC01MTMsMTEgKzUxMyw5IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKHZhcmlhbnQuaWRlbnRpZmll
cigpLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw3ICsxMjExLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9m
ZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgfQogCi0gICAgdm9p
ZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25z
dCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZVZhbHVlLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIpCiAgICAgewogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsK
ICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKQEAgLTEyMjQsNyArMTIy
Miw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAgICAgICBUcmFuc2l0
aW9uKiB0cmFuc2l0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIHRyYW5zaXRpb24g
PSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAg
fQpAQCAtMTI2OSw3ICsxMjY3LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChkYXRhLCBwcm9w
ZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBj
YW5FeGl0OwogCi0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoZGlkQWxsb2NhdGVTdG9yYWdlKSB7CiAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0
ZXJmbHksCkBAIC0xNDA2LDEwICsxNDA0LDEwIEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgaWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHN0
YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgIGJhc2VWYWx1ZS5tX3N0
cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRl
bnRpZmllcigpLnVpZCgpLAorICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LAogICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAg
IGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCkBAIC0xNDI0LDggKzE0MjIsOCBAQCBjbGFzcyBDb25z
dGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAKICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7
Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFy
aWFudHMoKSkgewotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlv
blNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9u
KGNvbmRpdGlvbikpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDgs
NyArMTQ0Niw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAg
ICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkgfHwgcHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCku
aXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKQEAgLTE0NjQsOCArMTQ2Miw4IEBA
IGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBm
b2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5
SWRTdGF0dXMsIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50
aWMsIHN0YXR1cykpLAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVy
UHV0QnlTdGF0dXMsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBzdGF0dXMpKSwKICAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUpKTsKIAogICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1
aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDYwZmJiMTVj
NTkxNmI4OWRiNGM2ZDU1MTUwYzY2NTNjMzdlMThmMWUuLmU2NDgxNjdjMTE4NmJjOGM5M2YzMmU4
YzU0YmU3NTE4MzBlZjExMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCmluZGV4IGFhNDk2NGU5YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3Mzg1
MDkuLmUyNWIxZjM4NTQ5MzU0YWUxMzJhZGRiY2I2OGFjYjlkYTgwYjUyOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMTIzNiw2ICsxMjM2LDEw
IEBAIGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgZml4RWRnZTxTeW1ib2xVc2U+KGNoaWxkMik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJlZ2lzdGVyIHBy
ZXNzdXJlIG9uIDMyLWJpdCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCkBAIC0yODY1LDcgKzI4Njks
NyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJ
bnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYz
Li4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2Rl
LCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVz
KCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0
dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsK
KyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRh
ZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1w
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNjJhMWZlZjNkYzJjZGRl
MTA5MTUyNGQ2NzM0MDg0MGZkM2YyNjBiMS4uMWJlYzhkZWVkOWRiZGJhNTA3ZDlhM2ZiMWIwMzll
MjZlZTFhZGQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMTIwMiw2
ICsxMjAyLDcgQEAgY2xhc3MgR3JhcGggZmluYWwgOiBwdWJsaWMgdmlydHVhbCBTY2FubmFibGUg
ewogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3ltYm9sU3RydWN0dXJlOwogCiAgICAgSGFzaFNl
dDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CisgICAgSGFzaFNldDxOb2RlKj4gbV9zbG93UHV0QnlW
YWw7CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dENoaWxkcmVuSW1wbChWaXNpdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNj
YjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUy
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4z
NjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNz
IEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMu
YXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQ
YXRoKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAg
ICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJh
dG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0
IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQog
ICAgIHsKICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFz
cyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVD
YWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dp
dGhUaGlzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0
b3I+LCA0PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwog
ICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBt
X2RlbEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVy
YXRvcj4sIDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQu
Y3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRh
ZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4
aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBj
YXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CmluZGV4IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIw
MTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZh
cmlhbnQuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAi
U3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzky
LDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZz
ZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRC
eUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFy
aWFudHM7CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9v
bCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRC
eVN0YXR1cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAg
ICAgCi0gICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMq
IHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkp
OwotICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAg
IEFTU0VSVChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1
dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFh
MDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVm
ZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01
NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEZpbHRlckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5
U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1
cywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywg
Tm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQx
NmVhYmViYjllMjIyMzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2Jl
ZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJh
c2VsaW5lQ28KIAogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlm
IChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGlu
ZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRo
aXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9z
c2libGUgdGhhdCB3ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBj
b25zaWRlciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJh
c2VsaW5lIENvZGVCbG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4g
KEEpIGdldHMgREZHIChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVj
dHMgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1
cmVTdHViSW5mbyBmcm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxs
LgotICAgICAgICAgICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNl
IGl0IGlzIG5vdCBleGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAg
ICAgICAgLy8gNS4gVGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28g
KEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9j
ayBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0
dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlk
IChvcmlnaW5hbGx5LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChB
KSdzIEpJVERhdGEgaXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29k
ZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+
ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmln
aW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvKTsKICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJl
dGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2
Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2
ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAg
LTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1
NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2Rl
cyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5z
IHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBz
aW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1
c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJp
YW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1
cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0
LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBt
X2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVz
OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
aW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4
NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
QEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5k
ZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYz
MjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0ZTJk
NmI1ZDk5M2ViNmIuLjRjYTIzNTlkOWRkZWM4NzBmMDBmYTg0NmEzNzIwYzI4Y2RhYmNhMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtMjY5MCwzNSArMjY5MCw4MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzogewogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwgfHwg
bm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCk7Ci0KLSAgICAgICAgICAgIGlmIChjaGlsZDEu
dXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtp
bmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9yQ2VsbFdpdGhTdHJpbmcobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250YWlucyhu
b2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0
cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
Mi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3lt
Ym9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRo
U3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwotICAgICAgICAgICAgICAgICAg
ICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIGNoaWxkMSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xs
IHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIGNoaWxkMik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJvcGVydHku
anNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2
YWx1ZS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdENlbGxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBw
cm9wZXJ0eVJlZ3MsIHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncywgdmFs
dWVSZWdzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAg
ICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxk
MSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJl
IHJpZ2h0LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQy
KTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUo
KS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0
QnlWYWxDZWxsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwg
cHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgY2hpbGQx
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBjaGlsZDIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlKG5vZGUsIGNoaWxkMyk7CisKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworICAg
ICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Q7Cisg
ICAgICAgICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IG5vZGUtPmVjbWFNb2RlKCk7CisKKyAgICAg
ICAgICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsK
KworICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9
IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5
cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUo
Y2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1Bh
dGg7CisgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAorICAgICAgICAgICAg
ICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1
ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIpOworCisgICAgICAgICAgICBtX2ppdC5hZGRQ
dXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKwogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7
CiAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTQzMjIsNyArNDM2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJH
ZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBGaWx0
ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uZDQ1NWNh
NGU2OGU0NzBiZDRiOTZiZTBhZTFhOTAyOWQ3YmVhY2VhOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0zMTc3LDM0ICszMTc3
LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3Ao
KSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5vcCgp
KTsKLQotICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewotICAg
ICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAg
ICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhub2RlLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpIHx8IChjaGlsZDEudXNlS2luZCgpICE9
IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5nKG5vZGUsIGNoaWxk
MSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBT
eW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNl
bGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2wobm9kZSwgY2hp
bGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgY2hpbGQxKTsKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxkMik7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJn
MkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmcz
LmdwcigpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpCisgICAgICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2Rl
LT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQ
UiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICAgICAgICAg
IGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlz
LCBjaGlsZDEpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGlsZDIp
OwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOwotICAgICAg
ICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFy
ZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdw
cigpOwotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
bm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwot
ICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgIAorCisgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGls
ZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworCisg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87CisgICAgICAgICAgICBHUFJSZWcgc3R1
YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICAgICAgc3R1YkluZm8gPSBHUFJU
ZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5n
cHIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGNoaWxk
Mik7CisgICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgY2hpbGQzKTsKKworICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAg
ICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJh
dGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+
c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51
c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9
PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbm9kZS0+
ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKwor
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3RyaW5n
KSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRy
dWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUo
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hp
bGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0
aDsKKyAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwg
c3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uLAorICAgICAgICAg
ICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIs
IGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bV9qaXQuYWRkUHV0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKICAgICAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwogICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC01ODcxLDcgKzU5MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAg
IGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggYjkwNjY1ZWNjZTUyYzU3ZjQ0
YjcwZDQ2N2M0YTRlNWE1ZjM3MDJlMC4uOTdiYjZlMDg2OTkzNTIzYzI5ZTFlMTEwYTIwNDM4MDI5
YTBkMjdkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKQEAgLTIzMyw2ICsyMzMsMTUgQEAgY2xh
c3MgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAg
ICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAg
ICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgorICAgICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkJpZ1VpbnQ2NEFycmF5OiB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0g
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkgJiYgKGNo
aWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBjaGlsZDEudXNlS2luZCgpID09IEtub3duQ2Vs
bFVzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zaWRlckJhcnJpZXIoY2hpbGQxLCBj
aGlsZDMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5jNWU1
Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZhbGlk
YXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24o
KS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3Bw
CmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4MDlk
N2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtMTk2
LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAg
ICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRl
ckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBAQCBj
bGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNh
c2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0
dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJhOWNm
NzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVj
dHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0
QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA1
YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4ZWY3MTAwLi4xYjBlZjM5YzU1MTEyMTgy
NTk1OTc2OGYxNDlkZjBkODZmOWZhZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtNTU1
Niw1NyArNTU1NiwxNTUgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6QmlnSW50NjRBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChjaGlsZDEudXNl
S2luZCgpID09IENlbGxVc2UpIHsKLSAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NK
IG9wZXJhdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5k
KCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkg
PT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
PmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0OwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdOb25TdHJpY3Q7CisgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250YWlucyhtX25vZGUpIHx8IChjaGlsZDEudXNlS2lu
ZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAg
ICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVj
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCku
aXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmlj
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZt
Q2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwo
Y2hpbGQxKSwgbG93U3RyaW5nKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTdHJpbmcoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGls
ZDMpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3Qo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbENlbGxTeW1ib2xTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
U3ltYm9sTm9uU3RyaWN0OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQo
KSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmlj
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJv
bE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVl
KGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3ltYm9sKGNoaWxk
MiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZfSklUT3BlcmF0
aW9uX0dKSkogb3BlcmF0aW9uOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRC
eVZhbERpcmVjdCkgewotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNT
dHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0
cmljdCgpKQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0OworICAgICAgICAgICAgICAgIFZfSklU
T3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOworICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+
ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Tm9uU3RyaWN0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0OworICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShjaGls
ZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgdm1DYWxsKAotICAgICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxvd0pT
VmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fbm9kZTsKKworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGNoaWxk
MSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dKU1ZhbHVlKGNoaWxkMiwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBz
cGVjdWxhdGUoY2hpbGQyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShjaGlsZDMpOworICAgICAg
ICAgICAgYm9vbCBwcm9wZXJ0eUlzU3RyaW5nID0gZmFsc2U7CisgICAgICAgICAgICBib29sIHBy
b3BlcnR5SXNJbnQzMiA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3ltYm9s
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZShjaGlsZDIpLmlzVHlwZShT
cGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY0ludDMy
T25seSkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisg
ICAgICAgICAgICAgICAgcHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocHJvcGVydHkpOworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHZhbHVlKTsKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChtX25vdENlbGxNYXNrLCBWYWx1ZVJlcDo6bGF0ZVJlZyhHUFJJbmZvOjpu
b3RDZWxsTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9u
dW1iZXJUYWcsIFZhbHVlUmVwOjpsYXRlUmVnKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7
CisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IDEgOiAwOworCisg
ICAgICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFu
ZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAg
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgICAgIENvZGVPcmln
aW4gbm9kZVNlbWFudGljT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAg
ICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX25vZGUtPmVjbWFNb2RlKCk7CisgICAgICAgICAgICBi
b29sIGlzRGlyZWN0ID0gbV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0OworICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAg
ICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNv
bW1vbi5jb2RlT3JpZ2lucy0+YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlU2VtYW50aWNPcmln
aW4pOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFyZ2V0
IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6
SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPSBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0
aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBleGl0IGZvciBjYWxsIElDJ3MgY3JlYXRlZCBieSB0aGUgSUMgZm9yIGdldHRlcnMuIFdlIGRv
bid0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0
aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAorICAg
ICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBleGNl
cHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNp
dGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHBhcmFtc1swXS5n
cHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwYXJhbXNbMV0uZ3By
KCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gcGFyYW1zWzJdLmdwcigpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CisK
KyAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRv
cj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHByb3Bl
cnR5SXNTdHJpbmc7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSBwcm9wZXJ0eUlzSW50MzI7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gcHJvcGVydHlJc1N5bWJvbDsKKworICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkZUTEpJVCkpCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNs
b3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsOworICAgICAgICAgICAgICAgICAgICBh
dXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExK
SVQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1YkluZm9H
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkuY2FsbCgpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24s
IEludmFsaWRHUFJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJlcG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2lu
LCBzbG93UGF0aENhbGwpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtODk1MSw3ICs5MDQ5LDcg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNh
c2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
IFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CiAg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAgICAgICAg
ICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs5MDY0LDE2IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkg
KyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlh
bnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRz
W2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAg
ICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1
dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24s
IHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0
aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50aWMu
Y29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcsNyAr
OTA4NSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdU
eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlw
ZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlh
bnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRm
NTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBkZWYg
c2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0cnVj
dHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUg
IlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4Njhi
Yjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAog
ICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmljdE9w
dGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZpZWxk
U3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAotICAg
IG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2VsZlBh
dGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlBZGRB
Y2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBtYWNy
byhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBtYWNy
byhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhHZW5l
cmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4MWMy
ZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAgICAg
bV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOworICAg
IG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9pbkJ5
VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6ZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXplKCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VPZnMu
c2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4ID09
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2b2lk
IEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNo
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBh
dGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1
ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCmluZGV4IDZjNGYxMWY2OGU5MDNlYmE2N2M2ZDdlYTkzODdkODFiNDU2YWUwZjUu
LjZjMzRhYzY3M2EyODJjODhiYTFlYmNmYzRhY2UxODU1ZmEwMjM4MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21w
aWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNv
bXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tl
ciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1
dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMg
dm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNjcsMTYgKzI0NSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGxpbmsoKTsKICAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAgICAgICAKLSAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlW
YWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLQogICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxlSWRlbnRpZmllcik7CiAKLSAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKTsKLQogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
b3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTM4Miwz
OCArMzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAogICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSos
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmls
ZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1p
dEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0gICAg
ICAgIAotICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSop
OwotICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4g
cmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2YWx1
ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5k
Ci0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1
cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNl
cy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmlj
Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMyU2hh
cGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBK
dW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFs
SW5mbywgRG91YmxlU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2Rl
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZh
bChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVk
QXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgVHlw
ZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBF
Q01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0xMDY0LDYgKzEwMDUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsKICAg
ICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dpdGhU
aGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsKKyAg
ICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAgICAg
VmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8SklU
SW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5SWRH
ZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0xMDkxLDYgKzEwMzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAg
ICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAg
IHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQg
bV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJ
bmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlO
VF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2NC4u
YTRiYjhmOGJkZDA3NjhiYWM5MzlhODI3ZDU2YjZiOWIyZDRjZDU1MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAg
LTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIAog
ICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklUQnlJ
ZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nl
c3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKKyAg
ICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVl
LCBzdHViSW5mb0dQUikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAgICAs
IG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw0MyBAQCB2b2lkIEpJVEdldEJ5
VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYg
c2xvd1BhdGgpCiAgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNs
b3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1dEJ5
VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBh
cnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHViSW5mb0dQUikKKyAgICA6IEJhc2UoY29kZUJsb2Nr
LCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2VkUmVn
aXN0ZXJzKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAg
IG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAgbV9zdHVi
SW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJlZ3Mu
cHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFs
dWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiA9IHN0dWJJbmZvR1BSOworICAgIG1fc3R1YkluZm8tPm1fYXJyYXlQcm9maWxlR1BSID0gYXJy
YXlQcm9maWxlR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+YmFz
ZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIgPSB2
YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJvcGVy
dHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6Zmlu
YWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0
aFN0YXJ0TG9jYXRpb247Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6SklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBl
IGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJbmZv
R1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRl
SW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0MTAx
YTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uMzVhNzdmOGU3Mzk2ZTQ2MjdlY2Q2ZTA4
YzUwNDBjZDE0ZmU0NTc0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9yIHsK
IAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJh
dG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBtX2Vj
bWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAgQ29k
ZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJh
c2UsCkBAIC0xNDIsMTAgKzE0MCwzNyBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMg
c2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1vZGU7
CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAgIFB1
dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvcigp
ID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2RlQmxv
Y2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFycmF5UHJv
ZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0aEp1
bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9qdW1w
OworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVm
ZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisKK3ByaXZhdGU6CisgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKK307CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CmluZGV4IDE3YzI3ZmRjMWNkM2JmNjMyNmE0M2I1ZmVmODFlNjBlNmNjNDdmMDIuLjY3ZTBiNzgz
MDlhNDNmMmJiYjk5YTkxYjM2ODliOTI3YjI2MmRiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCkBAIC0zNTIsNiArMzUyLDE0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9m
aWxlCiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
eworICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzIoc2Ny
YXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZM
YXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKKyAgICB9Cit9CisKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVBy
b2ZpbGUpCiB7CiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRy
ZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKQEAgLTM2MiwyNCArMzcwLDYgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmkKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFk
ZHJlc3NPZk91dE9mQm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hv
b3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5UHJv
ZmlsZVNhdyA9IFtdIChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBhYmls
aXR5KSB7Ci0gICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJh
eXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJy
YXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlmIChh
cnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAgICByZXR1cm4g
SklURG91YmxlOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJTaGFw
ZSkpCi0gICAgICAgIHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFy
cmF5TW9kZXMsIEFycmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3Rv
cmFnZTsKLSAgICByZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lOTElORSBpbnQz
Ml90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1ODM4
ZDc3NWJlY2M3MWY4MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGExNWRh
OTcxOWEyOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBz
bG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRC
eShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3Qp
OwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBA
IC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9j
aywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90
LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIs
IHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3QpOwog
fQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBA
IC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9j
aywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xv
dCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwg
c2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAK
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkKQEAg
LTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90
LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBz
bG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyArODg4
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChhY2Nl
c3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2
bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmVw
YXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVj
dHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNsb3Qs
ICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
LCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5cGUg
PT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAogICAg
ICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9sZFN0
cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBw
dXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CisgICAg
ICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3Qs
IG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6
OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAKLXN0
YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2Ny
aXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0gICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9
ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5NDEs
OCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91
dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4
KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBwdXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNW
YWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRC
eUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAg
ICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJv
ZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFycmF5
UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8g
cHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIC8v
IERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlWYWxJ
bmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRp
ZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHByb3Bl
cnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAgc2Nv
cGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNtYU1v
ZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHBy
b3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVl
IHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2Rl
IGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1Zh
bHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAg
ICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4
ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGluZ1R5
cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5k
cygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJh
eVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZh
bHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhTaG91
bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJZGVu
dGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZv
LT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9va1Ns
b3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25TbG93
UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBw
cm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0gY2xh
c3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0aW1p
emF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1
dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUs
IEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwotCi0g
ICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0
aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0
aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2Rl
KCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBBU1NF
UlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAg
ICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNPcHRp
bWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
b3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlN
b2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlNb2Rl
UGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9k
ZSkgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2NrLCBi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAgb3B0
aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAgaWYg
KGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0g
YXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VPYmpl
Y3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAg
ICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVCbG9j
aywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAgICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2sp
OworICAgICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVjbWFN
b2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxl
ZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhl
ZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAo
b3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9i
amVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgICAg
IGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNj
cmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0Lmlz
U3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7
CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApOwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0
ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFi
eVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4p
IHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9w
ZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAg
ICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBT
ZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAg
ICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihj
b2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0
KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dElubGluZShn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNz
VHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8s
IFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9wdGlt
aXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRpbWl6
YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAgICAv
LyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGlu
ZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBh
Z2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0gICAg
ICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1
bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1h
eSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0gICAg
ICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8tPnNs
b3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0aW9u
UmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2Jq
ZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiB9
CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUp
KQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQ
cm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlv
blJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2
ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBi
eVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyks
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0aWMg
T3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFs
bC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0
aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1
ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpT
VmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFT
U0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKLSAg
ICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1
Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAg
ICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3QoYXJy
YXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBpZiAo
IWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlwdC5p
c0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5z
dHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVy
aWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUp
IHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0gICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJs
b2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAg
ICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Cisg
ICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVwYXRj
aEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9Cisg
ICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21l
IG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0
IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGlt
aXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUlu
Zm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2Fj
aGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJZGVu
dGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShn
bG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6
YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2Vlbikgewot
ICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3BlcnR5
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1p
emVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNl
ZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKKwor
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdp
bmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgQ29tbW9u
U2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBlICE9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0Nl
bGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmVwYXRj
aFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRl
bnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpEaXJl
Y3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9w
dGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRp
bWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAg
ICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRj
aGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFr
ZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0g
ICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBv
cnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFs
IG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0g
ICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8t
PnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNjcmlw
dCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0aW9u
UmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVD
TUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKLSAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9uUmVz
dWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZl
VXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNl
RGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2JqZWN0
LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzdHJp
Y3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBl
Y21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBi
YXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAgIGRp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9k
ZTo6c2xvcHB5KCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vi
c2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBFQ01BTW9kZSBlY21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUp
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9n
dWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAg
c3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3Bw
eSgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgp
KTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSks
IHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2Rl
OjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUu
aXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAg
IGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCAy
NTg0ZTk5NWU0NjZkZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZjM2Y0
YmU4M2UwNmJlMDYyNTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9w
dGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5kKSk7
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2VuZXJp
Yywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwotSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbElu
Zm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1KU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmlj
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChD
YWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggM2QxZDg0ZmM4
MjAyYmY4ODliZGYyMGVhMzM4ZGY4YTkxMTA5MDYzYi4uNTY5NDkzMDVhMzU1ZmE5MWU1YTM1YWJm
MTUyOGQ3NzUxM2QwYWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCwxNzggKzQzOCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7Ci0gICAgaWYgKHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50KQotICAgICAgICBtb3ZlKEltbTMyKGdldE9wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7Ci0gICAgZWxzZQotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKIAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgUGF0Y2hhYmxlSnVt
cCBub3RJbmRleDsKLSAgICBpZiAoIXByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KSB7Ci0g
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fbm90SW5kZXhKdW1wVGFy
Z2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNJbnQzMi5saW5rKHRo
aXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hh
YmxlSnVtcElmTm90SW50KHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4
KTsKLSAgICAgICAgfQotICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgot
ICAgICAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLSAgICB9Ci0gICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOwogCi0g
ICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAg
IC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgbG9hZDgoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUo
cHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFs
SW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlW
YWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdl
bigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKQorICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRU
eXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFs
Q29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChP
cCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlm
IChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAgICAg
IGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmso
dGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAg
IEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExhYmVs
IHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNo
YXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsK
LSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdo
dCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1
bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsK
LSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lz
dGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAgIHJl
YWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChy
ZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNv
ZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0g
ICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAg
Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0g
ICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0b3Jl
MzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAg
ICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0
ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNo
VGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0KHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAgCi0g
ICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVn
VDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJyYW5j
aDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhpcyk7
Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAgLy8g
RklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2
ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYyLDEyICs1MTcs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0g
RUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7
CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBi
eXRlY29kZS5tX2VjbWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc1LDQ4ICs1MzMsNDAg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlW
YWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1
dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5m
bywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICAvLyBUaGV5IGFyZSBjb25m
aWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSks
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9i
eXRlY29kZUluZGV4KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjA7CisgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBw
YXRoIGFuZCBub3QgY2xvYmJlcmVkLgorICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOworICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICAvLyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgLy8gY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGVj
bWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7Cisg
ICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQ
YXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNzMxLDI0ICs1ODEsMjMgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXQKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGppdC5zdG9y
ZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCisgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUp
PihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1Yklu
Zm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAK
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChB
ZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQoKTsK
IApAQCAtODEwLDEzICs2NTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1lbnRH
UFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5R1BS
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUyLDE0
ICs3MDEsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQ
UjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CiAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2JhbE9i
amVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwgcHV0
S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dFBy
aXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCkBAIC0zMjkxLDgyICszMTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZhbElk
ZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2FjaGVh
YmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRy
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
LQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3Vi
bGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3Vv
dXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRzTGlu
a0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJy
YXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
Ynl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJh
cnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2Rl
KTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlwZSk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0
QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBC
aWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAg
ICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwg
dHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29k
ZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChuZWVk
c0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWco
bV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNv
ZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5jYWxs
ZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9u
LT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3Qp
IHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5l
UHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJl
dHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRk
cmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBi
eVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAg
ICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51
bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRh
cmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dP
cGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9w
ZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJu
QWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9u
UHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNv
bnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNwcCks
Ci0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBpbiBh
ZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRC
eVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFs
SW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
KS5wdHIoKTsKQEAgLTM0MDgsMjIzICszMTgxLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkEK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0
ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQgPT0g
UHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7Ci0g
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVtcExp
c3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRLaW5k
LCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNh
Y2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+ZG9u
ZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhh
bmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxzKSB7
Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAoY29u
c3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5j
YWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxT
aXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hC
dWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVy
dHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBQ
dXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+dXRm
OCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5m
bygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9w
ZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2Nh
dGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVy
bkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRoaXMg
ZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5pdCAo
SklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3RlZCBz
cGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVjdD4o
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmll
cik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJbnQo
dHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwot
ICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2Ny
YXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAgICBS
ZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJh
c2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0
ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0g
cmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgotICAg
IAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgaWYg
KGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNoMzIo
RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0
eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+
bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAgICAg
IGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3Rl
ZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAgICAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMyKEFk
ZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRlU2Ny
YXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIGxh
dGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2Uo
cHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxh
dGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZO
b3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUg
bG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUg
c2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9y
KCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZh
bHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChl
bGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5
cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFy
bHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7Ci0g
ICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVtcCBj
bGFtcGVkID0ganVtcCgpOwotICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQubGlu
ayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAg
c3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgc3RvcmU4
KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5U2Ny
YXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFz
ZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAg
IEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVn
aXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0g
ICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJl
Z1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJ
RCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVn
VDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9h
ZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3Jh
dGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0
VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9y
VHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRy
ZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJs
eVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBl
YXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsK
LQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJv
dW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsK
LSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1wIGRv
dWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVydElu
dDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVt
cCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lz
dGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBS
ZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUs
IGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJyYW5j
aElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5
U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVD
YXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgbGF0
ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92ZUlu
dHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFk
eS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0
aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAg
IC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRl
U2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0
aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAg
ICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVG
bG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJl
Z1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IGU4MjY5ZmQxZTE5OWYxNTI0ODRlYjQ0ZGRlZjJh
YWQxNzc4MjMyZmEuLjhiYTEwZTQzZWE2ZTU1OGE1N2JmZmNlYmE5M2U0ZmRjMDllYjI4NzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcApAQCAtNDY2LDE1MSArNDY2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZDIo
YmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1
bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QxKTsK
LSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGluZT8KLSAgICBs
b2FkOChBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEsIFRy
dXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCByZWdUMSk7Ci0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9v
c2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJ
bnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJh
ZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUs
IGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlw
ZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwg
YmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dDYXNl
KGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwg
ZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9Q
QVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVh
bCwgcmVnVDEsIFRydXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKTsKLSAgICAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsK
LSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRk
cmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgCi0g
ICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJT
aGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7
Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAg
ICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSk7Ci0gICAgICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMyk7Ci0gICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5j
aElmTm90SW50MzIocmVnVDEpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwg
ZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5s
aW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwgZnBSZWdU
MCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAg
ICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNl
SW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBvdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkp
OwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8pCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgZW1pdExv
YWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2Zp
bGUpLCByZWdUNik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Q2LCByZWdU
Nyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKGJ5
VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIElu
dmFsaWRHUFJSZWcpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJl
Z1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5bG9h
ZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAKLSAg
ICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNp
YWxDYXNlKHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsK
LSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAganVtcCgp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0g
ICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8v
IEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3Rp
dmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNjIwLDEyICs0OTUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0o
YXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAg
ICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAog
ICAgIGlmIChpc0RpcmVjdCkKQEAgLTYzMywyMSArNTExLDIwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4Kytd
OworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxh
YmVsKCk7Ci0gICAgCisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwogICAg
IC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdp
c3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBv
biBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZDIoYmFzZSwg
cmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJl
Z1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0
KSwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOwogCi0gICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJn
ZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleCsrOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
KTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4
IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjBmYWFlNWMyMmE5YzVi
NjNiMzUxODExMzhlMDlmZThjN2EzYmFiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMKICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25H
ZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQp
IC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQg
cHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAg
ICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAg
IHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAg
ICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAg
ICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgc3dp
dGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0K
ICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGF1dG8gYXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNs
b3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2gg
KHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNs
b3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6
Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0Ogor
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAg
ICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRL
aW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJ
bmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBw
dXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJl
cGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01B
TW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAg
ICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiArODc2
LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lk
IHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCBy
ZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwogICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7CisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUg
aW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBpZiAo
IWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAg
ICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
KworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApOworCisg
ICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhi
YXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3Rv
cmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRB
cnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAg
ICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgp
ICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUp
IHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3Jh
Z2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKwor
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9P
ck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2
bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9p
ZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7
CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0
S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVy
aWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKIH0KIAogc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQs
IEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2LDcgKzExMjEsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1
YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5SWRTZWxmUGF0
Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gs
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkp
OwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemUpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2Vs
Zihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9w
ZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5MSw1NSBAQCB2b2lkIHJlc2V0R2V0QnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtp
bgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkKIHsK
LSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVC
bG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIEZ1bmN0aW9uVHlwZSBv
cHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKLSAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7
CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1
c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxv
Y2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5
cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5
cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihy
ZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogCiAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7
Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoK
KyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgor
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0K
IAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
aAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2MzczYzBhYzM2MjlkOGU2Li5lY2UzNzdl
ZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBjbGFzcyBHZXRCeUtpbmQgewogICAg
IFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlk
LAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxCeUtpbmQgewogICAgIEJ5SWQsCiAg
ICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFzcyBJbkJ5S2luZCB7CiAKIHZvaWQg
cmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVl
IGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0Y2hH
ZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50
aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5k
KTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1Zh
bHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCByZXBhdGNoQXJyYXlQdXRC
eVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBp
bmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0
Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSos
IENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0
dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgU3Ry
dWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtp
bmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNvbnN0
IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXBh
dGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3Qq
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1YkluZm8m
KTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlu
a0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBsaW5r
UG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZv
JiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKaW5kZXggN2VlYTc1ODcwZTdiMTUyOTY5MTBk
NWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2IwNzkxNGVlZDdmNjc3Nzk5MDFmYmJhMzA2YmM0NzEy
YzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gVGhlIGZv
bGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBmb3IgdGhlIG9wY29kZSBuYW1lcy4gVGhpcyBpcyBu
ZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5jcHAg
YW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8gYmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcuIGlu
IEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlTdGF0dXMuY3BwKQogLy8gd2hpY2ggcmVmZXJzIHRv
IHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZWZpeGVkIHdpdGggImxsaW50XyIu
CiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50YXRpb24sIHRoZSAyIGFyZSBlcXVpdmFsZW50LiBI
ZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFsaWFzIGhlcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436429</attachid>
            <date>2021-08-25 14:47:44 -0700</date>
            <delta_ts>2021-08-25 19:45:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210825144743.patch</filename>
            <type>text/plain</type>
            <size>346315</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi5iZGMxYjY1NGMzZDUzN2Ey
YjBiNGMwZDNlNWJlOWZiYjQwNTI1N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyODEgQEAKKzIwMjEtMDgtMjUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIFB1dEJ5
VmFsIElDIHRvIG1vZGVybiBzdHlsZS4gVGhpcyBwb2x5bW9ycGhpYyBQdXRCeVZhbCBjYW4gaGFu
ZGxlIG11bHRpcGxlIGFycmF5IHR5cGVzIGFuZCBtdWx0aXBsZSBpZGVudGlmaWVycy4KKyAgICAg
ICAgQWxzbywgdGhpcyByZW1vdmVzIGFkaG9jIElDIGNvZGUgaW4gQmFzZWxpbmUgc28gdGhhdCBp
dCBwYXZlcyB0aGUgd2F5IHRvIHVubGlua2VkIEJhc2VsaW5lIEpJVCBieSBjbGVhbmluZyB1cCBJ
Qy4KKworICAgICAgICBTZXZlcmFsIGludGVyZXN0aW5nIHBvaW50cyBvZiB0aGUgZGVzaWduLgor
CisgICAgICAgIDEuIFdlIG5lZWQgdG8gcGFzcyBBcnJheVByb2ZpbGUqIHZpYSBHUFJSZWcgdG8g
SUMgc2luY2Ugd2UgbmVlZCB0byBwcm9maWxlIG1heVN0b3JlVG9Ib2xlLCB3aGljaCBpcyBzdGls
bCBpbXBvcnRhbnQgdG8gYXZvaWQgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgMi4gVHJhbnNpdGlv
biAvIFJlcGxhY2UgSUMgbmVlZCB0byByZWNvcmQgcHJvcGVydHlSZWdzIGlmIGl0IGV4aXN0cyBu
b3QgdG8gY2xvYmJlciB0aGVzZSByZWdpc3RlcnMuIFRoaXMgaXMgaW1wb3J0YW50IGluIERGRyAv
IEZUTCBzaW5jZQorICAgICAgICAgICBJQyBzaG91bGQgbm90IGNsb2JiZXIgdGhlc2UgcmVnaXN0
ZXJzIHVubGVzcyBpdCBpcyBmbHVzaGVkLiBJdCBhbHNvIG1ha2VzIEJhc2VsaW5lIGNvZGUgc21h
bGxlciBzaW5jZSB3ZSBkbyBub3QgcmVsb2FkIHRoZW0gaW4gdGhlIHNsb3cgcGF0aCBjYWxsLgor
ICAgICAgICAzLiBBZGRlZCBhIHBhdGggZm9sZGluZyBTdHJpbmcvU3ltYm9sIHdoZW4gZW1pdHRp
bmcgUHV0QnlWYWwgaW4gREZHIC8gRlRMLiBUaGlzIGVkZ2UtY2FzZSBpcyBmb3VuZCB2aWEgYSBt
aWNyb2JlbmNobWFyay4gTGV0J3MgY29uc2lkZXIgdGhlIGNhc2U6IG9uZQorICAgICAgICAgICBw
dXRfYnlfdmFsIHNpdGUgaGFzIG9uZSBpZGVudGlmaWVyICJmb28iLCBidXQgaXQgaGFzIHNvIG1h
bnkgZGlmZmVyZW50IFN0cnVjdHVyZXMuIFByZXZpb3VzbHksIHdlIGVtaXQgSklUUHV0QnlJZEdl
bmVyYXRvciBhZGhvY2x5LCBhbmQgc3RpbGwgd2UKKyAgICAgICAgICAgY2FjaGUgdGhpcyAiZm9v
IiBpZGVudGlmaWVyIGluIGNhY2hlZElkLiBJbiBERkcgLyBGVEwsIHdoaWxlIHdlIGNhbm5vdCBt
YWtlIGl0IFB1dEJ5T2Zmc2V0LCB3ZSBjYW4gZW1pdCBQdXRCeUlkIHNpbmNlIHdlIGtub3cgdGhh
dCBpZGVudGlmaWVyIGlzCisgICAgICAgICAgIGFsd2F5cyAiZm9vIi4gQnV0IGFmdGVyIHRoaXMg
cGF0Y2gncyBjaGFuZ2UsIHN1Y2ggYSBzaXRlIGJlY29tZXMgc2xvdy1wYXRoLiBBbmQgdGhlbiB0
aGlzIGlkZW50aWZpZXIgaW5mb3JtYXRpb24gaXMgbWlzc2VkLCBhbmQgd2Ugd2VyZSBlbWl0dGlu
ZworICAgICAgICAgICBQdXRCeVZhbCBmb3IgdGhhdC4gRm9yIG5vdywgd2UgYXR0ZW1wdCB0byBm
b2xkIHRvIG9uZSBpZGVudGlmaWVyIGluIERGR0J5dGVDb2RlUGFyc2VyIHNvIHRoYXQgd2UgY2Fu
IHN0aWxsIGF0dGVtcHQgdG8gbWFrZSBpdCBQdXRCeUlkLCB3aGljaAorICAgICAgICAgICBjYW4g
YmUgUHV0QnlPZmZzZXQgaW4gY29uc3RhbnQgZm9sZGluZyBwaGFzZS4gV2Ugd291bGQgbGlrZSB0
byBoYW5kbGUgdGhpcyBvbmUgaWRlbnRpZmllciBzbG93LXBhdGggY2FzZSBpbiBQdXRCeVN0YXR1
cyAvIEdldEJ5U3RhdHVzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgICAgcGF0Y2guCisgICAgICAg
IDQuIE5vdywgREZHIE9TUiBleGl0IGRvZXMgbm90IHF1ZXJ5IHRvIEJ5VmFsSW5mbyBmb3Igc2V0
dGVyIGNhbGxzIHNpbmNlIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIHVzZSBTdHJ1Y3R1cmVTdHViSW5m
byBpbiBCYXNlbGluZS4KKworICAgICAgICBSZXN1bHRzIG9mIE1pY3JvYmVuY2htYXJrcyBsb29r
IGdvb2QuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkCisKKyAgICAgICAg
cHV0LWJ5LXZhbC1kaXJlY3QtbGFyZ2UtaW5kZXggICAgICAgICAgICAgICAgICA5NC42MjY1Ky0w
LjkwNzYgICAgICAgICAgIDkzLjQ1NTArLTAuNzEyMSAgICAgICAgICBtaWdodCBiZSAxLjAxMjV4
IGZhc3RlcgorICAgICAgICBpbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIzLjcxMzErLTAuMzI4MiAgICAgXiAgICAgMjIuNzY3OSstMC4xMTM3ICAgICAgICBeIGRlZmlu
aXRlbHkgMS4wNDE1eCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGln
aHRseS1wb2x5bW9ycGhpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjk4NTIrLTAuMDI4NCAgICAgICAgICAgIDEuOTU4MCstMC4wMjI0
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzOXggZmFzdGVyCisgICAgICAgIGdldC1hbmQtcHV0LWJ5
LXZhbC1kb3VibGUtaW5kZXgtZG9udC1mYWxsLW9mZi1hLWNsaWZmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODUuNDc2MistMC41NzM3ICAg
ICA/ICAgIDE4NS42MzI1Ky0wLjU4MTkgICAgICAgID8KKyAgICAgICAgcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZyAgICAgICAgICAgICAzMC45OTAzKy0wLjEyMDcgICAgICAgICAg
IDMwLjgwOTcrLTAuMTI4NQorICAgICAgICBwdXQtYnktdmFsLW1hY2hpbmUtaW50ICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjg4MDMrLTAuMDM4NCAgICAgICAgICAgIDEuODcwNystMC4wNDQw
CisgICAgICAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zm
c2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQuODQ2MystMC4xMTQ4ICAgICAgICAgICAgNC43ODM5Ky0wLjA1NDcgICAgICAgICAgbWln
aHQgYmUgMS4wMTMweCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBs
YWNlLWFuZC10cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDguODczMCstMS41OTM0ICAgICBeICAgICAgNi4yMjc2Ky0wLjA1
ODUgICAgICAgIF4gZGVmaW5pdGVseSAxLjQyNDh4IGZhc3RlcgorICAgICAgICBmb2xkLXB1dC1i
eS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjgxODMrLTAuMDg0MSAg
ICAgPyAgICAgIDQuODIzMystMC4wODkyICAgICAgICA/CisgICAgICAgIHB1dC1ieS12YWwtZGly
ZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjg0NSstMC4wMDkxICAgICA/ICAg
ICAgMC4yOTAxKy0wLjAwODggICAgICAgID8gbWlnaHQgYmUgMS4wMTk2eCBzbG93ZXIKKyAgICAg
ICAgcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuMzUyNyst
MC4wNjg2ICAgICA/ICAgICAgNi4zOTMzKy0wLjA5NjEgICAgICAgID8KKyAgICAgICAgcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgOS4zNTU2Ky0zLjE0MjEg
ICAgICAgICAgICA3LjE1MDkrLTAuMTAxOSAgICAgICAgICBtaWdodCBiZSAxLjMwODN4IGZhc3Rl
cgorICAgICAgICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
MDA1MistMC4wMzA5ICAgICAgICAgICAgMS45NzgxKy0wLjAzOTcgICAgICAgICAgbWlnaHQgYmUg
MS4wMTM3eCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC1uZWdhdGl2ZS1hcnJheS1pbmRleCAg
ICAgICAgICAgICAgICAxNC45NTcyKy0wLjEyMjEgICAgIF4gICAgIDE0LjU2MzYrLTAuMTA0NCAg
ICAgICAgXiBkZWZpbml0ZWx5IDEuMDI3MHggZmFzdGVyCisgICAgICAgIHB1dC1ieS12YWwtd2l0
aC1zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgMTEuNjM0NSstNC4zMDQ4ICAgICBeICAg
ICAgNy4wOTE5Ky0wLjA5MTggICAgICAgIF4gZGVmaW5pdGVseSAxLjY0MDV4IGZhc3RlcgorICAg
ICAgICBwdXQtYnktdmFsLWxhcmdlLWluZGV4LWJsYW5rLWluZGV4aW5nLXR5cGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xNDI1Ky0w
LjExNjUgICAgICAgICAgICAzLjEyMzYrLTAuMDM3OAorICAgICAgICBpbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIzLjQ5MzIrLTAuMzE4NiAgICAgXiAgICAgMjIuODQ2
OSstMC4wODczICAgICAgICBeIGRlZmluaXRlbHkgMS4wMjgzeCBmYXN0ZXIKKyAgICAgICAgcG9s
eW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAzNi42MDQ2Ky0xLjY1
MTkgICAgIF4gICAgIDMwLjg1OTcrLTAuMTQ3NCAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTg2Mngg
ZmFzdGVyCisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIHNob3dlZCByb3VnaGx5IDAuMi0wLjMlIHBy
b2dyZXNzaW9uLgorCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgfCAgICAgICAg
ICAgICAgIHN1YnRlc3QgICAgICAgICAgICAgICAgfCAgICAgbXMgICAgICB8ICAgICBtcyAgICAg
IHwgIGIgLyBhICAgfCBwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3Zlcnkg
UmF0ZSkgfAorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHwgRWxtLVRvZG9NVkMg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwxMjEuOTE2NjY3ICAgfDEyMS45NTgzMzMgICB8MS4w
MDAzNDIgIHwgMC44NzY4MDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgfCBWdWVKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgICAgICAgfDI2LjI2
MzMzMyAgICB8MjYuMDA2NjY3ICAgIHwwLjk5MDIyNyAgfCAwLjI2Mzg2OCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IEVtYmVySlMtVG9kb01WQyAg
ICAgICAgICAgICAgICAgICAgICB8MTI3LjA4MDAwMCAgIHwxMjcuODY2NjY3ICAgfDEuMDA2MTkw
ICB8IDAuMDExNDk3IChzaWduaWZpY2FudCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgIHwgQmFja2JvbmVKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgIHw0OC45MjAwMDAg
ICAgfDQ5LjMxODMzMyAgICB8MS4wMDgxNDMgIHwgMC4wMDMzOTUgKHNpZ25pZmljYW50KSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBQcmVhY3QtVG9kb01WQyAgICAgICAg
ICAgICAgICAgICAgICAgfDE5LjgyODMzMyAgICB8MTkuODI4MzMzICAgIHwxLjAwMDAwMCAgfCAx
LjAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICB8IEFuZ3VsYXJKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgICB8MTM0LjAxMTY2NyAgIHwx
MzIuMDgwMDAwICAgfDAuOTg1NTg2ICB8IDAuMDAwMDAwIChzaWduaWZpY2FudCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgVmFuaWxsYS1FUzIwMTUtVG9kb01WQyAgICAg
ICAgICAgICAgIHw2My43MjY2NjcgICAgfDYzLjgzODMzMyAgICB8MS4wMDE3NTIgIHwgMC40MDg0
MDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBJ
bmZlcm5vLVRvZG9NVkMgICAgICAgICAgICAgICAgICAgICAgfDY1LjE1MzMzMyAgICB8NjMuNzUz
MzMzICAgIHwwLjk3ODUxMiAgfCAwLjAwMDAwMCAoc2lnbmlmaWNhbnQpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICB8IEZsaWdodC1Ub2RvTVZDICAgICAgICAgICAgICAgICAg
ICAgICB8NzguMTMzMzMzICAgIHw3OC43ODAwMDAgICAgfDEuMDA4Mjc2ICB8IDAuMDk3Nzk0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgQW5ndWxh
cjItVHlwZVNjcmlwdC1Ub2RvTVZDICAgICAgICAgIHw0MC40MTUwMDAgICAgfDQwLjEwMDAwMCAg
ICB8MC45OTIyMDYgIHwgMC4yODc2MzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgfCBWYW5pbGxhSlMtVG9kb01WQyAgICAgICAgICAgICAgICAgICAg
fDUxLjkzMTY2NyAgICB8NTIuNTAwMDAwICAgIHwxLjAxMDk0NCAgfCAwLjAwNDE0OSAoc2lnbmlm
aWNhbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IGpRdWVyeS1Ub2Rv
TVZDICAgICAgICAgICAgICAgICAgICAgICB8MjI2LjA1NjY2NyAgIHwyMjUuMDczMzMzICAgfDAu
OTk1NjUwICB8IDAuMDA3Nzk2IChzaWduaWZpY2FudCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgIHwgRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDICAgICAgICAgICAgICAgIHwzNDEu
MjEwMDAwICAgfDM0MC45NzgzMzMgICB8MC45OTkzMjEgIHwgMC42MjMzODYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBSZWFjdC1Ub2RvTVZDICAg
ICAgICAgICAgICAgICAgICAgICAgfDg3LjE5ODMzMyAgICB8ODYuODkzMzMzICAgIHwwLjk5NjUw
MiAgfCAwLjA0MjE4OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICB8IFJlYWN0LVJlZHV4LVRvZG9NVkMgICAgICAgICAgICAgICAgICB8MTQ2LjUwNjY2
NyAgIHwxNDUuOTU4MzMzICAgfDAuOTk2MjU3ICB8IDAuMDE4ODAxIChzaWduaWZpY2FudCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgVmFuaWxsYS1FUzIwMTUtQmFiZWwt
V2VicGFjay1Ub2RvTVZDIHw2MS40NTAwMDAgICAgfDYxLjg3MDAwMCAgICB8MS4wMDY4MzUgIHwg
MC4wMDAwNDkgKHNpZ25pZmljYW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBhIG1lYW4gPSAyNTQuODUxMTEKKyAgICAgICAg
YiBtZWFuID0gMjU1LjI1NzM1CisgICAgICAgIHBWYWx1ZSA9IDAuMTg1NjU2MTY1NgorICAgICAg
ICAoQmlnZ2VyIG1lYW5zIGFyZSBiZXR0ZXIuKQorICAgICAgICAxLjAwMiB0aW1lcyBiZXR0ZXIK
KyAgICAgICAgUmVzdWx0cyBBUkUgTk9UIHNpZ25pZmljYW50CisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6
S2V5KToKKyAgICAgICAgKEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRv
cj09KToKKyAgICAgICAgKEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0
b3I6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAg
KEpTQzo6QXJyYXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29k
ZS9JQ1N0YXR1c01hcC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OmdldFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVn
ZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFw
cGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVj
dHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3Rv
cmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0
QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBz
KToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRl
ZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNT
dGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRC
eVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpw
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9y
L0RTTC5yYjoKKyAgICAgICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAg
KEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVy
YXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFs
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxH
ZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3Nl
QXJyYXlNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbE9wdGltaXplKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6
CisgICAgICAgIChKU0M6OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
SklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeSk6CisgICAgICAg
IChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuaDoKKwogMjAyMS0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bCBzaG91bGQgbm90IGxvYWQgaW5kZXhpbmdUeXBlIHVubmVjZXNzYXJpbHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYWRkNmNiNDMyMjkyN2YyMjE1YTYzMmQzODkzYmRjOWMzODI1
ZmE3YS4uMzIzZDhhNDBlMWY2ZTIzZmNlMjdlZDdjMDhkYjUzMjQ3M2IyNmE1OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFF
RjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMx
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlT
dGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0
MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0
QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURG
Nzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxs
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsMTEgKzI4NjYs
MTEgQEAKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0
YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1
RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlT
dGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlW
YXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXRCeVZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJB
OUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdFJhY2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJl
ZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tl
ZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODY5NSwxMCAr
ODY5NSwxMCBAQAogCQkJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRp
dGlvbi5oICovLAogCQkJCTBGMTVDRDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3Mu
Y3BwICovLAogCQkJCTBGMTVDRDIxMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAq
LywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8s
Ci0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJ
CQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJ
CTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMy
OUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJMEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJl
Y29yZGVkU3RhdHVzZXMuY3BwICovLAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBS
ZWNvcmRlZFN0YXR1c2VzLmggKi8sCkBAIC0xMDUwNiw4ICsxMDUwNiw4IEBACiAJCQkJNzkxNjBE
QkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFC
NjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZE
RTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1
OWMzMDIwZC4uNzA3N2VmOWFlMzExNzZmNjM4NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dy
YW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2Rl
L1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAotYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRl
Y29kZS9QdXRCeVN0YXR1cy5jcHAKK2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0
ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCmluZGV4IGZhOGI2YjIyZTNhNGUyZGM5NTBjN2JiMjQ2
OTdlNjk4MjgwYzM1YjYuLjJjY2QzNTYzODMwNDlkNzhmYzI2OWJmMDU1YjJjMjExNmU0N2NiYzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAg
LTk5LDYgKzk5LDE5IEBAIFJlZjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlCiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NFN0b3JlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJvdG90eXBlQWNjZXNzQ2hh
aW4pOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMjcyLDYgKzI4NSwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrU2tpcHBpbmdDb25zdGFudElk
ZW50aWZpZXJDaGVjaygpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
IGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zMjYsNiArMzUyLDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJZGVudGlmaWVyTmFt
ZU1hdGNoKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0
cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRE
b3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTM3OCw2ICs0MTcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlD
aGVjaygpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJp
bmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQy
NSwxMSArNDc3LDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6bmVlZHNTY3JhdGNoRlBSKCkgY29uc3QK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTE1LDYgKzU4MCwxOSBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiB2bSwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTU2OSw2ICs2NDcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpk
b2VzQ2FsbHMoVk0mIHZtLCBWZWN0b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrSWZEb2VzQ2FsbHMp
IGNvbnMKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6
CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGRvZXNDYWxscyA9
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlcGxhY2U6CkBAIC02NTAsNiArNzQx
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhl
cikgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBv
dGhlci50eXBlKCkgPT0gdHlwZSgpOwogCiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7
CkBAIC05NjEsNiArMTA2NSw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAo
c3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CkBAIC0xMDYwLDYgKzExNjYs
OCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgICAgIGlmIChzdHViSW5mby5t
X3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxvY2F0b3IubG9j
ayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQ
cm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhz
dHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0
Y2hHUFIpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CiAKQEAgLTExNDUsNiArMTI1Myw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5
UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQ
UlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIp
OworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BS
KTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtMTE5OSwx
NSArMTMwOSwxNCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAg
ICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5hbmQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIp
OwogCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRzOwotICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgaXNFbXB0eTsKLQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVSZWdzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkp
OwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQog
ICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAg
ICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAg
ICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCkBAIC0xMjI3LDE2ICsxMzM2LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRo
R3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwogCiAgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBpc091dE9mQm91
bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BS
LCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGppdC5sb2Fk
VmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIEND
YWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIEpT
VmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNo
SWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBpc0Vt
cHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAgICAgICAgZmFpbEFu
ZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAg
ICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYK
QEAgLTEyNjIsMjEgKzEzNzEsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRj
aDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91YmxlTG9hZCkgewog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hGUFIgIT0gSW52YWxp
ZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdo
dCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJh
bmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsKICAgICAgICAgICAg
ICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVncyk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgaml0Lmxv
YWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwg
Q0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUikpOwotICAg
ICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShzY3Jh
dGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVy
czo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0g
ICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2gzR1BSKTsK
KyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShz
Y3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gzR1BS
LCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsxMzk1LDI3MyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgeworICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYg
IWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5r
KCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBv
cHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5kSWdub3JlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Cisg
ICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxk
IGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgorICAgICAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIC8vIGludDMyIGNoZWNr
IGRvbmUgaW4gcG9seW1vcnBoaWMgYWNjZXNzLgorICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuYnJhbmNoVGVz
dDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2hHUFIpOworCisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgaXNPdXRPZkJvdW5kczsKKworICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOworICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKKyAgICAgICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRl
OworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICAg
ICAgYXV0byBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9IFsmXSB7CisgICAgICAgICAgICBwcmVz
ZXJ2ZWRTdGF0ZSA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhq
aXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3Bh
Y2UpOworICAgICAgICB9OworCisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RvcmVSZXN1
bHQ7CisgICAgICAgIGlmIChtX3R5cGUgPT0gSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlKSB7Cisg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFycmF5U3Rv
cmFnZVNoYXBlKSkpOworCisgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygpOwor
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgaml0Lnplcm9F
eHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBz
Y3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKwor
ICAgICAgICAgICAgc3RvcmVSZXN1bHQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBl
IGV4cGVjdGVkU2hhcGU7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBl
ID0gSW50MzJTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3Vi
bGVTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gQ29udGln
dW91c1NoYXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4cGVjdGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAg
IHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGlzT3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZh
bGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5v
dEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAg
ICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdEludC5s
aW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BS
LCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUikpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVJbnRzVG9Eb3VibGUodmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBzdGF0ZS5zY3JhdGNoRlBS
KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJlYWR5LmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0eUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAgICAg
ICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVk
Q29udGlndW91c1N0b3JlOgorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQo
cHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1
ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0
ZUJhcnJpZXIgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKworICAgICAgICBpZiAobV90eXBlID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkg
ewogICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZqaXQpOwotICAgICAgICAgICAgaXNF
bXB0eS5saW5rKCZqaXQpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxl
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkp
OworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJ
blZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpCZWxvdywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsK
KworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
ICZqaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5r
KCZqaXQpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5h
ZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gy
R1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSAmJiAh
ZmFpbEFuZElnbm9yZS5lbXB0eSgpKSB7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmxpbmso
JmppdCk7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25v
cmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0YXRl
LmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQg
Y291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisKKyAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsKKworICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisgICAgICAgIGppdC5s
b2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsKKworICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZS5zY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAgICAgYXV0byBkb3Vi
bGVDYXNlID0gaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzdGF0ZS5zY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgZG91YmxlQ2FzZS5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsK
KyNlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBqaXQubW92
ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCks
IHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICByZWFkeS5saW5rKCZqaXQp
OworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJvZmlsZSB3aWxsIGJlIHNl
dCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eUdQUiwgc2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBh
bGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3Mp
OworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CisgICAg
ICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaWYg
KHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoM0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpCisgICAgICAg
ICAgICBzY3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0
YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAorICAgICAg
ICAgICAgaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9F
eHRyYVNwYWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoMkdQ
Uik7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBmYWxzZSk7CisKKyAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAg
ICAgICAgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7CisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaDNHUFIpOworICAgICAg
ICAgICAgICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxv
d09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmKSk7
CisgICAgICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
ZmYpKTsKKyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNHUFIsIHNjcmF0Y2gzR1BS
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7CisgICAgICAgICAgICAg
ICAgY2xhbXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGluQm91bmRzLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQUiwgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNP
bmUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OkJh
c2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIodmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaXNPdXRPZkJvdW5kcyk7Ci0gICAg
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc0VtcHR5KTsKKyAgICAgICAgICAg
IEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LnNjcmF0Y2hGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaml0
LmNvbnZlcnREb3VibGVUb0Zsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIHN0YXRlLnNjcmF0Y2hGUFIp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHN0YXRlLnNjcmF0Y2hGUFIsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRpbWVzRm91cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4
OiB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMjIsNiArMTY4OCw4IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0
dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
Lm1fc3R1YkluZm9HUFIpOworICAgICAgICBpZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1f
YXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CkBAIC0xODk0LDggKzIyNjIsMTIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby51c2VkUmVnaXN0ZXJzKTsKICAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFzZVJlZ3MoKSk7CiAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGlmIChzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSkK
KyAgICAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAg
ICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBp
ZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICAgICAg
YWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gSW52YWxpZEdQUlJlZzsKQEAgLTIwNTgsNiArMjQzMCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgICAgIGFsbG9j
YXRvci5sb2NrKGJhc2VHUFIpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAh
PSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9z
dHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJh
eVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKTsKICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uS2lu
ZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKQEAgLTIxODMsNiArMjU1
NywxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNhc2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6
CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8g
YmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFy
dCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9k
eSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAg
ICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIg
KzI1ODMsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3Jl
OgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRT
dG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAg
ICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxv
YWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU6CiAgICAgICAgIHJldHVy
biBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVp
bnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIy
ODQsNiArMjY4MCwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vz
c0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYgcmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVk
SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNl
IEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0
YTk2MjExMDUwODk5YmFkZmQ5YmUuLjU2M2ExNTUyYWU0MjE2NDQwNDZkMGFhNDFkMjNiNmFkZDVk
YjY1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApA
QCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nlc3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJM
b2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAgICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAg
ICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAgICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAg
ICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAgICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwK
KyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAg
ICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlLAorICAgICAgICBJbmRleGVk
VHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3Rv
cmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMy
U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAK
ICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CkBAIC0zNTMsMTIgKzM2NiwxMyBAQCBjbGFzcyBT
aGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgc3RydWN0IEtleSB7CiAgICAgICAgICAgICBLZXko
KSA9IGRlZmF1bHQ7CiAKLSAgICAgICAgICAgIEtleShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZh
bHVlR1BSLCBHUFJSZWcgZXh0cmFHUFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycywgUG9seW1vcnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkK
KyAgICAgICAgICAgIEtleShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcg
ZXh0cmFHUFIsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgUG9seW1vcnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSog
d3JhcHBlZCkKICAgICAgICAgICAgICAgICA6IG1fd3JhcHBlZCh3cmFwcGVkKQogICAgICAgICAg
ICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3ZhbHVlR1BS
KHZhbHVlR1BSKQogICAgICAgICAgICAgICAgICwgbV9leHRyYUdQUihleHRyYUdQUikKICAgICAg
ICAgICAgICAgICAsIG1fc3R1YkluZm9HUFIoc3R1YkluZm9HUFIpCisgICAgICAgICAgICAgICAg
LCBtX2FycmF5UHJvZmlsZUdQUihhcnJheVByb2ZpbGVHUFIpCiAgICAgICAgICAgICAgICAgLCBt
X3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKICAgICAgICAgICAgIHsgfQogCkBAIC0zNzUs
NiArMzg5LDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAgICAgICAg
ICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYg
YS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1f
c3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAgICYmIGEu
bV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAgICAgICAg
ICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAg
ICAgIH0KIApAQCAtMzgzLDYgKzM5OCw3IEBAIGNsYXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAg
ICAgICAgICAgR1BSUmVnIG1fdmFsdWVHUFI7CiAgICAgICAgICAgICBHUFJSZWcgbV9leHRyYUdQ
UjsKICAgICAgICAgICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSOworICAgICAgICAgICAgR1BSUmVn
IG1fYXJyYXlQcm9maWxlR1BSOwogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0
ZXJzOwogICAgICAgICB9OwogCkBAIC00MTYsNiArNDMyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1
YlNldCB7CiAgICAgICAgICAgICAgICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVH
UFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgog
ICAgICAgICAgICAgICAgICAgICAmJiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BS
CisgICAgICAgICAgICAgICAgICAgICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5
UHJvZmlsZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBi
Lm1fdXNlZFJlZ2lzdGVycykgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9y
ZGVyaW5nIG9mIGNhc2VzIGRvZXMgbm90IG1hdHRlciBmb3Igc2hhcmluZyBjYXBhYmlsaXRpZXMu
CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSBzdWNj
ZXNzIHJhdGUgYnkgbWFraW5nIHRoaXMgY29tcGFyaXNvbiAvIGhhc2hpbmcgbm9uIG9yZGVyaW5n
IHNlbnNpdGl2ZS4KQEAgLTQ0NSw2ICs0NjIsNyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsK
ICAgICAgICAgR1BSUmVnIG1fdmFsdWVHUFI7CiAgICAgICAgIEdQUlJlZyBtX2V4dHJhR1BSOwog
ICAgICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUjsKKyAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9m
aWxlR1BSOwogICAgICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIGNv
bnN0IEZpeGVkVmVjdG9yPFJlZlB0cjxBY2Nlc3NDYXNlPj4mIG1fY2FzZXM7CiAgICAgICAgIGNv
bnN0IEZpeGVkVmVjdG9yPFN0cnVjdHVyZUlEPiYgbV93ZWFrU3RydWN0dXJlczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAppbmRleCA2ZGM3YjBlNTQ0
N2ZlMDYwZGJjYmQyNGQ5OTA5NzU2NTc5ZmM2NTc0Li45MWRhOGYzZWZmOTJmYzNhODk1NzBkNzVh
NGI5MTNiZDI2MzJjYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5oCkBAIC0yMDgsNiArMjA4LDkgQEAgY2xhc3MgQXJyYXlQcm9maWxlIHsKICAg
ICBBcnJheU1vZGVzKiBhZGRyZXNzT2ZBcnJheU1vZGVzKCkgeyByZXR1cm4gJm1fb2JzZXJ2ZWRB
cnJheU1vZGVzOyB9CiAgICAgYm9vbCogYWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVy
biAmbV9tYXlTdG9yZVRvSG9sZTsgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1h
eVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5UHJvZmlsZSwgbV9t
YXlTdG9yZVRvSG9sZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbGFz
dFNlZW5TdHJ1Y3R1cmVJRCk7IH0KKwogICAgIHZvaWQgc2V0T3V0T2ZCb3VuZHMoKSB7IG1fb3V0
T2ZCb3VuZHMgPSB0cnVlOyB9CiAgICAgYm9vbCogYWRkcmVzc09mT3V0T2ZCb3VuZHMoKSB7IHJl
dHVybiAmbV9vdXRPZkJvdW5kczsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCmluZGV4IDc2NzFk
ODdiMWVhNzQ5ZGMzNDU2Zjc3NjVhYzA2YzRhOGJjZmIyYjEuLmMwMjVhN2JmNjUxOTRiZGE0ZTgy
MTUxZDljYjNmMjk2NzhkYTkyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAKQEAgLTE0MSw2ICsxNDEs
OCBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHZXR0ZXIoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgY29ucwogICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0
dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9j
YXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSKTsKICAgICBhbGxvY2F0b3IubG9j
ayhzY3JhdGNoR1BSKTsKIAogICAgIEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVn
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzTWFw
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAppbmRleCBm
YTBhNmQ1MjNiN2FkMGRmODgyMTEwN2ZlM2I4NDkxN2M0ODNkOTUwLi43YTA1OGMzZDAyNTk2YmY2
ZWE4ZmY5YThhNzJiNGRjMmExZDE4OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSUNTdGF0dXNNYXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDYWxsTGlua1N0YXR1
czsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEdldEJ5U3RhdHVzOwogY2xhc3MgSW5CeVN0YXR1
czsKLWNsYXNzIFB1dEJ5SWRTdGF0dXM7CitjbGFzcyBQdXRCeVN0YXR1czsKIGNsYXNzIERlbGV0
ZUJ5U3RhdHVzOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBzdHJ1Y3QgQnlWYWxJbmZvOwpA
QCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgSUNTdGF0dXMgewogICAgIENhbGxMaW5rU3RhdHVzKiBj
YWxsU3RhdHVzIHsgbnVsbHB0ciB9OwogICAgIEdldEJ5U3RhdHVzKiBnZXRTdGF0dXMgeyBudWxs
cHRyIH07CiAgICAgSW5CeVN0YXR1cyogaW5TdGF0dXMgeyBudWxscHRyIH07Ci0gICAgUHV0QnlJ
ZFN0YXR1cyogcHV0U3RhdHVzIHsgbnVsbHB0ciB9OworICAgIFB1dEJ5U3RhdHVzKiBwdXRTdGF0
dXMgeyBudWxscHRyIH07CiAgICAgRGVsZXRlQnlTdGF0dXMqIGRlbGV0ZVN0YXR1cyB7IG51bGxw
dHIgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5jcHAKaW5kZXggNDg0MTAxMzlkYzJmOGMwZDVjODBhMmZmOTA1YzNhYTZhMTM1ZGZiMi4u
YzFlYjJkNjlkMjc1NGUwNTFhODI1OWY2Mzc3ZTY0NzE0ZWVhZWU2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKQEAgLTIxNiw4ICsyMTYs
MTIgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgR1BSUmVnIGdldFNjcmF0Y2hSZWdpc3RlcihTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8uYmFz
ZVRhZ0dQUik7CiAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8udmFsdWVUYWdHUFIpOwogI2Vu
ZGlmCisgICAgaWYgKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKQorICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggODEwNGEyZjMxZDkxMzEwYzNkMzhlMzNh
ZGQxZmZlNjYyNzVkOTExNC4uNDBkNmExZjlkYTU4MjUyMDU1NGFhYzM0ZWMxYTQ0ZTQyOWFmODY0
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCkBAIC00OTQsNiArNDk0LDggQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MK
ICNlbmRpZgogICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgIGlm
IChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBh
bGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CiAKICAgICBzdGF0ZS5z
Y3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogCkBAIC04MTAsNiAr
ODEyLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5l
cmF0ZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2MKICAgICAgICAgICAgIHN0dWJJbmZvLnZh
bHVlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8ucmVncy50aGlzR1BSLAogICAgICAgICAgICAg
c3R1YkluZm8ubV9zdHViSW5mb0dQUiwKKyAgICAgICAgICAgIHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSLAogICAgICAgICAgICAgc3R1YkluZm8udXNlZFJlZ2lzdGVycywKICAgICAgICAgICAg
IGtleXMsCiAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlcywKQEAgLTg0Niw3ICs4NDksNyBAQCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkp
IHsKICAgICAgICAgaWYgKGNhbkJlU2hhcmVkKQotICAgICAgICAgICAgdm0ubV9zaGFyZWRKSVRT
dHVicy0+YWRkKFNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleShzdHViSW5mby5iYXNlR1BSLCBz
dHViSW5mby52YWx1ZUdQUiwgc3R1YkluZm8ucmVncy50aGlzR1BSLCBzdHViSW5mby5tX3N0dWJJ
bmZvR1BSLCBzdHViSW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CisgICAgICAgICAg
ICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5KHN0
dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHViSW5mby5yZWdzLnRoaXNHUFIs
IHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSLCBzdHVi
SW5mby51c2VkUmVnaXN0ZXJzLCBzdHViLmdldCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZp
bmlzaENvZGVHZW5lcmF0aW9uKFdURk1vdmUoc3R1YikpOwpAQCAtMTAyMiw2ICsxMDI1LDQ1IEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NU
eXBlIHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDoKICAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkU3RyaW5nTG9hZCIpOwogICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRleGVkSW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbmRleGVkRG91YmxlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZERvdWJsZVN0
b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250
aWd1b3VzU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50OFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDhTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQ4
U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToK
KyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3Jl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NFN0b3JlIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWFmYWI5ZDM5
YzdhNGVhNmU2MWNmNTY0OGFlZmFjOTBjMWY3YzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLQotI2luY2x1ZGUgIkJ5dGVjb2RlU3Ry
dWN0cy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0
dXMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNT
dGF0dXNVdGlscy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIFB1dEJ5SWRT
dGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0g
ICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKLX0K
LQotdm9pZCBQdXRCeUlkU3RhdHVzOjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgbV92YXJpYW50cy5z
aHJpbmtUb0ZpdCgpOwotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0gcHJvZmlsZWRC
bG9jay0+dm0oKTsKLSAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0KLSAgICAvLyBXZSBh
cmUgbm90IHlldCB1c2luZyBgY29tcHV0ZUZyb21MTEludGAgaW4gYW55IHBsYWNlIGZvciBgcHV0
X3ByaXZhdGVfbmFtZWAuCi0gICAgLy8gV2UgY2FuIGFkZCBzdXBwb3J0IGZvciBpdCBpZiB0aGlz
IGlzIHJlcXVpcmVkIGluIGZ1dHVyZSBjaGFuZ2VzLCBzaW5jZSB3ZSBoYXZlCi0gICAgLy8gSUMg
aW1wbGVtZW50ZWQgZm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgotICAgIEFTU0VSVCghaW5z
dHJ1Y3Rpb24tPmlzPE9wUHV0UHJpdmF0ZU5hbWU+KCkpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKLQotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKLSAgICBpZiAoIXN0cnVjdHVyZUlEKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1
Y3R1cmVJRCk7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1f
bmV3U3RydWN0dXJlSUQ7Ci0gICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkgewotICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7Ci0gICAgCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwotICAgIGlmICghKGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKLSAgICAgICAg
Y29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKLSAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zm
c2V0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRG
bGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0
YSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9j
ayk7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICBpZiAoZGlkRXhpdCkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKLSAgICBQdXRCeUlk
U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCBzdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLy8gRU5B
QkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICBVTlVTRURfUEFSQU0oZGlkRXhp
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQotewotICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgICAgIGxv
Y2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRT
aXRlRGF0YSkKLXsKLSAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJ
bmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKLSAgICBpZiAoIWlz
SW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc3VtbWFy
eSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKLSAgICBjYXNl
IENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0
ZWQgdG8gY2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCi0gICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAKLSAgICBj
YXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAg
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwg
b2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBl
OjpTdHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUu
c3R1YjsKLSAgICAgICAgCi0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICBy
ZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQWNjZXNz
Q2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVBy
b3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFu
dDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
KTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0g
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldCA9IGFjY2Vzcy5jb25kaXRpb25TZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpTZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
b21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21w
dXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25T
ZXQoKSwgdWlkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNv
bXBsZXhHZXRTdGF0dXMua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0
U3RhdHVzOjpTaG91bGRTa2lwOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpU
YWtlc1Nsb3dQYXRoOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMg
PQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNj
ZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9j
aywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQ
dXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNl
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOwot
ICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21W
YWx1ZVNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JT
ZXR0ZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7
Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
Ci0gICAgfQotfQotCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVz
Q29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVE
YXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0
YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLSAgICBFeGl0RmxhZyBkaWRFeGl0ID0g
aGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKLQotICAg
IGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7Ci0gICAgICAg
IElDU3RhdHVzIHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKLSAgICAgICAgCi0g
ICAgICAgIGF1dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHJlc3VsdCkgLT4g
UHV0QnlJZFN0YXR1cyB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5saW5lZChjb2Rl
T3JpZ2luKSkgewotICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgYmFzZWxpbmVSZXN1bHQg
PSBjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGlu
ZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBj
YWxsRXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICBiYXNlbGluZVJlc3VsdC5tZXJnZShy
ZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZVJlc3VsdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChkaWRFeGl0LmlzU2V0KEV4aXRGcm9tSW5saW5lZCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zbG93VmVyc2lvbigpOwotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXMu
c3R1YkluZm8pIHsKLSAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+
b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5v
cHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgdWlkLCBjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMpCi0gICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0
YXR1cy5wdXRTdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNl
bGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBkaWRFeGl0LCBjYWxs
RXhpdFNpdGVEYXRhKTsKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRL
aW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCi17Ci0gICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgaWYgKHNl
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7Ci0gICAgCi0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0Owot
ICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRb
aV07Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0g
R2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJl
Q2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKLSAgICAKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1
dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAg
Ly8gV2UgY2FuJ3QgaGF2ZSBhIHZhbGlkIG9mZnNldCBmb3Igc3RydWN0dXJlcyBvbiBgUHV0UHJp
dmF0ZU5hbWVCeUlkYCBkZWZpbmUgbW9kZQotICAgICAgICAgICAgLy8gc2luY2UgaXQgbWVhbnMg
d2UgYXJlIHJlZGVmaW5pbmcgYSBwcml2YXRlIGZpZWxkLiBJbiBzdWNoIGNhc2UsIHdlIG5lZWQg
dG8gdGFrZSAKLSAgICAgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNlcHRpb24uCi0g
ICAgICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFs
dWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0K
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
ciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFdhdGNocG9pbnRTZXQqIHJlcGxhY2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwg
cmVwbGFjZVNldC0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRo
aXMgZXhlY3V0ZXMsIGl0J2xsIGNyZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0
Y2hwb2ludCBzZXQuCi0gICAgICAgICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhh
cyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcwotICAg
ICAgICAgICAgICAgIC8vIGdvaW5nIG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUg
dGhlIHdhdGNocG9pbnQgc2V0IGZyb20gdGhlIGNvbmN1cnJlbnQKLSAgICAgICAgICAgICAgICAv
LyBKSVQgdGhyZWFkLCBzbyBldmVuIGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQg
dG8gaGF2ZSBhIGxhenkgdGhpbmd5LgotICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVh
dmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQotICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFdlIGNhbiBoYXZlIGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBp
biBzZXQgbW9kZSBhbmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0
dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBpdCBtZWFucyB3ZSBhcmUKLSAgICAgICAgLy8gdHJ5aW5n
IHRvIHN0b3JlIGluIGEgbm90IGluc3RhbGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRh
a2UKLSAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdl
dHMgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAg
ICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVm
b3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAgICAgLy8gdHJ1ZSwgd2Ugd2Fu
dCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCi0gICAgCi0gICAgICAgIC8vIERvbid0IGNhY2hl
IHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBz
b21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAg
ICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgot
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgCi0gICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKCFpc0Rp
cmVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkp
OwotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgdWlkKTsKLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJl
IGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8u
Ci0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3Ry
dWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBBU1NF
UlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAKLSAgICAgICAgYm9vbCBkaWRBcHBlbmQg
PSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpKTsKLSAgICAgICAgaWYgKCFkaWRBcHBlbmQpCi0gICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAgcmVzdWx0
LnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIFB1
dEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIGlmIChtX3N0YXRlID09IE1h
a2VzQ2FsbHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChtX3N0YXRlICE9
IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQg
aSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhbnRzW2ld
Lm1ha2VzQ2FsbHMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6c2xvd1Zl
cnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKG1ha2VzQ2FsbHMoKSA/
IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KLXZvaWQgUHV0QnlJZFN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBmb3IgKFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAg
ICAgdmFyaWFudC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQdXRC
eUlkU3RhdHVzOjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2
b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0
QnlJZFN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7Ci0gICAgICAgIGlmICghdmFyaWFudC5maW5hbGl6ZSh2
bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5SWRTdGF0dXMmIG90aGVy
KQotewotICAgIGlmIChvdGhlci5tX3N0YXRlID09IE5vSW5mb3JtYXRpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7Ci0gICAgICAgICp0aGlz
ID0gUHV0QnlJZFN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMoKSkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCk7Ci0gICAgfTsKLSAgICAKLSAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKLSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgICp0aGlzID0gb3RoZXI7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIGlm
IChvdGhlci5tX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3co
KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyIDog
b3RoZXIubV92YXJpYW50cykgewotICAgICAgICAgICAgaWYgKCFhcHBlbmRWYXJpYW50KG90aGVy
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRh
a2VzU2xvd1BhdGg6Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICByZXR1cm4gbWVyZ2VT
bG93KCk7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQot
ewotICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZpbHRl
cklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc2V0KTsKLSAgICBmb3IgKFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKLSAgICAgICAgdmFyaWFudC5maXhUcmFuc2l0aW9u
VG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKLSAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
LSAgICBjYXNlIE5vSW5mb3JtYXRpb246Ci0gICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRp
b24pIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBTaW1wbGU6Ci0gICAg
ICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICAgICAgb3V0LnBy
aW50KCIoVGFrZXNTbG93UGF0aCkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFrZXND
YWxsczoKLSAgICAgICAgb3V0LnByaW50KCIoTWFrZXNDYWxscykiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGUyNTJkYjY5
YWM1NzEzZGM4ZThmOGI2NDQwMDBjYWU2MzBiMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkV4aXRGbGFnLmgiCi0jaW5jbHVk
ZSAiSUNTdGF0dXNNYXAuaCIKLSNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCi0jaW5j
bHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKLSNpbmNsdWRlICJTdHViSW5mb1N1bW1hcnkuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFZNOwotY2xhc3MgSlNH
bG9iYWxPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKLWNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsK
LQotY2xhc3MgUHV0QnlJZFN0YXR1cyBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIC8vIEl0J3MgdW5jYWNoZWQg
c28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAg
ICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgotICAgICAg
ICBTaW1wbGUsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGgu
Ci0gICAgICAgIFRha2VzU2xvd1BhdGgsCi0gICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBw
YXRocyB0aGF0IG1ha2UgY2FsbHMuCi0gICAgICAgIE1ha2VzQ2FsbHMKLSAgICB9OwotICAgIAot
ICAgIFB1dEJ5SWRTdGF0dXMoKQotICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUp
Ci0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUg
PT0gTWFrZXNDYWxscyk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMo
U3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN1bW1hcnkp
IHsKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246Ci0gICAgICAg
ICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlvbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZToKLSAgICAgICAgY2FzZSBTdHViSW5mb1N1
bW1hcnk6Ok1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6
VGFrZXNTbG93UGF0aDoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93
UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgICAgICBtX3N0YXRlID0gTWFrZXNDYWxsczsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiB2YXJpYW50KQotICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQotICAgIHsKLSAgICAg
ICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6
OkV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwotICAgIAotICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1
c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotI2VuZGlmCi0gICAgCi0gICAg
U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgCi0gICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9
Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9
Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtl
c1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gTWFrZXNDYWxsczsgfQotICAgIGJvb2wgbWFrZXNDYWxs
cygpIGNvbnN0OwotICAgIFB1dEJ5SWRTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25zdDsKLSAgICAK
LSAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUo
KTsgfQotICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYW50czsgfQotICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Ci0gICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IG1hcmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0g
ICAgdm9pZCBtZXJnZShjb25zdCBQdXRCeUlkU3RhdHVzJik7Ci0gICAgCi0gICAgdm9pZCBmaWx0
ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwotI2VuZGlm
Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBC
eXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICAKLSAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKLSAgICB2b2lkIHNocmlua1RvRml0
KCk7Ci0gICAgCi0gICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQs
IDE+IG1fdmFyaWFudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyNDU0ZDY0NzgyYTk2NDM5MzA5YWU5YTFmYTA0OGEzODcyNTUyMWYz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFu
dC5oIgotCi0jaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJIZWFwSW5saW5l
cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRWYXJpYW50
KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLSAgICA6IFB1dEJ5SWRWYXJpYW50KCkKLXsK
LSAgICAqdGhpcyA9IG90aGVyOwotfQotCi1QdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6
Om9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCi17Ci0gICAgbV9raW5kID0g
b3RoZXIubV9raW5kOwotICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7
Ci0gICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKLSAgICBtX2NvbmRp
dGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwotICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9v
ZmZzZXQ7Ci0gICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgIG1fY2FsbExp
bmtTdGF0dXMgPSBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0
YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQg
PSBSZXBsYWNlOwotICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBy
ZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHV0QnlJ
ZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgY29uc3QgU3RydWN0dXJl
U2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKLXsKLSAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9
IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOwot
ICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKLSAgICByZXN1bHQubV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50
OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMpCi17Ci0gICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwotICAgIHJlc3VsdC5tX2tpbmQgPSBT
ZXR0ZXI7Ci0gICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEZNb3ZlKGNhbGxMaW5rU3Rh
dHVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJ1Y3R1cmUqIFB1dEJ5SWRWYXJpYW50
OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1
cmUuc2l6ZSgpIDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNp
emUoKTsgaS0tOykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0
dXJlW2ldOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50
OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChraW5kKCkg
IT0gVHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJU
KG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29s
ZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtX29sZFN0cnVjdHVyZVtpXTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBtX25ld1N0cnVj
dHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9uZXdTdHJ1Y3R1
cmUgPSBudWxscHRyOwotICAgIG1fa2luZCA9IFJlcGxhY2U7Ci0gICAgbV9jb25kaXRpb25TZXQg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2Nh
bGxMaW5rU3RhdHVzKTsKLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6d3JpdGVzU3RydWN0dXJl
cygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFRyYW5zaXRpb246
Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OnJl
YWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCk7Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlh
bnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAotewotICAgIHJldHVybiBraW5kKCkgPT0gU2V0dGVyOwot
fQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFy
aWFudCYgb3RoZXIpCi17Ci0gICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgTm90
U2V0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgewotICAgICAgICBjYXNlIFJlcGxhY2U6IHsKLSAgICAgICAgICAgIEFT
U0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVy
Lm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
b2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0
aW9uOiB7Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7Ci0g
ICAgICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVw
bGFjZSgqdGhpcykpIHsKLSAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBj
YXNlIFRyYW5zaXRpb246Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAgICAg
IGNhc2UgUmVwbGFjZToKLSAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRp
b25XaXRoUmVwbGFjZShvdGhlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUcmFuc2l0
aW9uOiB7Ci0gICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1lcmdlZENv
bmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25T
ZXQpOwotICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBT
ZXR0ZXI6IHsKLSAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8
fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7Ci0gICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5r
U3RhdHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNl
dC5tZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlmICghbWVy
Z2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNs
b3RCYXNlQ29uZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OwotICAgICAg
ICAKLSAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCi0gICAgICAgICAgICBtX2NhbGxMaW5r
U3RhdHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7Ci0gICAgICAgIAotICAgICAg
ICBtX29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0gfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0
VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRCeUlkVmFyaWFudCYgcmVwbGFj
ZSkKLXsKLSAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwotICAgIEFTU0VSVChyZXBs
YWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKLSAgICBBU1NFUlQobV9vZmZzZXQgPT0gcmVwbGFjZS5t
X29mZnNldCk7Ci0gICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVjdHVyZXMoKSk7Ci0gICAg
QVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKLSAgICBBU1NFUlQocmVwbGFj
ZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgIAotICAgIC8vIFRoaXMgc29ydCBvZiBt
ZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFsb25nIHdoaWNoIHdlIGFk
ZCBhIG5ldyBmaWVsZCB3aGljaAotICAgIC8vIHRyYW5zaXRpb25zIHRvIHN0cnVjdHVyZSBTIHdo
aWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVyZSBTLiBUaGlzIGRvZXNu
J3QKLSAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbnl0aGluZyBvciBpZiB0
aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgotICAgIAotICAgIGlmIChyZWFsbG9jYXRl
c1N0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZXBsYWNl
Lm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0cnVjdHVyZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG1fbmV3U3Ry
dWN0dXJlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgaWYgKG1fbmV3
U3RydWN0dXJlKQotICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7
Ci19Ci0KLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFwKEFic3RyYWN0
U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFZhcmlhbnQ6Om1hcmtJZkNoZWFw
KFNsb3RWaXNpdG9yJik7Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkK
LXsKLSAgICBpZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQo
bV9uZXdTdHJ1Y3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fY2FsbExpbmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFB1dEJ5SWRW
YXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEluQ29udGV4
dChvdXQsIG51bGxwdHIpOwotfQotCi12b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIHN3
aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiPGVt
cHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgUmVwbGFjZToKLSAg
ICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNv
bnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29u
dGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
IiwgIiwgIj4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjoK
LSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxTZXR0ZXI6ICIsIGluQ29udGV4dChz
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29u
ZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0iKTsKLSAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9
ICIsIG1fb2Zmc2V0KTsKLSAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlu
a1N0YXR1cyk7Ci0gICAgICAgIG91dC5wcmludCgiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzVhNzNhMmY4ZDRiNWU1
ZjBhMWRlNDA4YTVmYmJkMWNiN2FiMjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENhbGxMaW5rU3RhdHVzOwotCi1jbGFzcyBQdXRCeUlkVmFyaWFudCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5kIHsKLSAgICAgICAgTm90
U2V0LAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBTZXR0
ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRWYXJpYW50KCkKLSAgICAgICAgOiBtX2tpbmQo
Tm90U2V0KQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCi0gICAgICAgICwgbV9u
ZXdTdHJ1Y3R1cmUobnVsbHB0cikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFB1dEJ5SWRWYXJp
YW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7Ci0gICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9y
PShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwotCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJl
cGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIAotICAg
IHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCi0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4pOwotICAgIAotICAgIEtpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFj
ZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwot
ICAgIH0KLSAgICAKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09
IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVj
dHVyZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVyZSgpOwotICAgIH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwga2luZCgpID09IFJlcGxhY2UgfHwga2luZCgpID09
IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9s
ZFN0cnVjdHVyZSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKSBjb25zdDsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOwotICAg
ICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4VHJh
bnNpdGlvblRvUmVwbGFjZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29sIHdyaXRlc1N0cnVjdHVy
ZXMoKSBjb25zdDsKLSAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwotICAgIGJv
b2wgbWFrZXNDYWxscygpIGNvbnN0OwotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsg
fQotICAgIAotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW50cmluc2ljcyBmb3IgU2V0dGVycyAo
aXQgd291bGQgYmUgc3dlZXQgaWYgd2UgZGlkKSBidXQgd2UgbmVlZCB0aGlzIGZvciB0ZW1wbGF0
ZWQgaGVscGVycy4KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyByZXR1cm4gTm9J
bnRyaW5zaWM7IH0KLQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0ZW1wbGF0ZWQgaGVscGVy
cy4KLSAgICBib29sIGlzUHJvcGVydHlVbnNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIENh
bGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdl
dCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJZFZhcmlh
bnQmIG90aGVyKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKLSAgICBib29sIGZpbmFsaXplKFZNJik7Ci0gICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmxhcHMoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNldCgpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFjZShjb25zdCBQdXRC
eUlkVmFyaWFudCYgcmVwbGFjZSk7Ci0gICAgCi0gICAgS2luZCBtX2tpbmQ7Ci0gICAgUHJvcGVy
dHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOwotICAg
IFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07Ci0gICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MTViMDljOGE1ZTkxM2Q3N2VkZWI3M2U2ZjFkNjI1ZmMyZGYyZThlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcApA
QCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5o
IgorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2Jvb2wgUHV0QnlTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlW
YXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92
YXJpYW50cywgdmFyaWFudCk7Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OnNocmlua1RvRml0KCkK
K3sKKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQoreworICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZt
KCk7CisgICAgCisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOworCisgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgeworICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIGNhc2Ug
b3BfcHV0X3ByaXZhdGVfbmFtZToKKyAgICAgICAgLy8gV2UgZG8gbm8gaGF2ZSBhIGNvZGUgcmV0
cmlldmluZyBMTEludCBpbmZvcm1hdGlvbiBmb3IgYG9wX3B1dF9wcml2YXRlX25hbWVgLgorICAg
ICAgICAvLyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4g
ZnV0dXJlIGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKKyAgICAgICAgLy8gSUMgaW1wbGVtZW50ZWQg
Zm9yIHRoaXMgb3BlcmF0aW9uIG9uIExMSW50LgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMo
Tm9JbmZvcm1hdGlvbik7CisgICAgZGVmYXVsdDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudGlmaWVyID0gJihwcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci0+aW1w
bCgpOworCisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVj
dHVyZUlEOworICAgIGlmICghc3RydWN0dXJlSUQpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisKKyAgICBTdHJ1Y3R1cmVJ
RCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CisgICAgaWYgKCFu
ZXdTdHJ1Y3R1cmVJRCkgeworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgc3Ry
dWN0dXJlLCBvZmZzZXQpOworICAgIH0KKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAKKyAg
ICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOworICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgCisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgIGlmICghKGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKSkpIHsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgK
KyAgICAgICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVj
dHVyZSwgdWlkKTsKKyAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gUHV0QnlWYXJpYW50Ojp0cmFuc2l0aW9uKG51bGxwdHIsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQor
UHV0QnlTdGF0dXM6OlB1dEJ5U3RhdHVzKFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgc3dpdGNoIChzdW1tYXJ5KSB7CisgICAgY2Fz
ZSBTdHViSW5mb1N1bW1hcnk6Ok5vSW5mb3JtYXRpb246CisgICAgICAgIG1fc3RhdGUgPSBOb0lu
Zm9ybWF0aW9uOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlNp
bXBsZToKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1
YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8u
dG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIDogTGlrZWx5VGFrZXNTbG93UGF0
aDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQ
YXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0
aCA/IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzIDogTWFrZXNDYWxsczsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQ
dXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZs
YWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
KQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAgVU5VU0VEX1BB
UkFNKGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkaWRFeGl0
KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAg
CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKS5zdHViSW5mbzsKKyAgICBQdXRCeVN0YXR1cyByZXN1bHQgPSBjb21wdXRl
Rm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIGNh
bGxFeGl0U2l0ZURhdGEpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0
ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKyAgICBVTlVTRURfUEFSQU0obWFwKTsK
KyAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxFeGl0U2l0
ZURhdGEpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQoreworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwg
YmFzZWxpbmVCbG9jaywgc3R1YkluZm8sCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7
Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNh
bGxFeGl0U2l0ZURhdGEpCit7CisgICAgU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnkgPSBTdHJ1Y3R1
cmVTdHViSW5mbzo6c3VtbWFyeShwcm9maWxlZEJsb2NrLT52bSgpLCBzdHViSW5mbyk7CisgICAg
aWYgKCFpc0lubGluZWFibGUoc3VtbWFyeSkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhz
dW1tYXJ5LCAqc3R1YkluZm8pOworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSgpKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgYXR0ZW1wdGVkIHRvIGNhY2hlIGJ1dCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgor
ICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0
dWJJbmZvKTsKKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVu
dGlmaWVyKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPQorICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUo
aWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCks
IG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDYWNoZVR5cGU6
OlN0dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5z
dHViOworICAgICAgICAKKyAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJv
dG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoYWNjZXNzLmlkZW50aWZpZXIo
KSwgc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVu
ZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkoYWNjZXNz
LnVpZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOworICAgICAgICAgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhbnQgPSBQdXRCeVZhcmlh
bnQ6OnRyYW5zaXRpb24oYWNjZXNzLmlkZW50aWZpZXIoKSwgYWNjZXNzLnN0cnVjdHVyZSgpLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJ
bmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3Rh
dHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25k
aXRpb25TZXQoKSwgYWNjZXNzLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21w
bGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJ
bmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVVu
aXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCku
Y2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1
cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0
YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6c2V0dGVyKGFjY2Vzcy5p
ZGVudGlmaWVyKCksIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxl
eEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwgV1RGTW92ZShjYWxsTGlua1N0YXR1cykpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24o
c3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhNYWtlc0NhbGxzKTsKKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICB9Cit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4
dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgRXhpdEZs
YWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJ
bmRleCk7CisKKyAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFj
aykgeworICAgICAgICBJQ1N0YXR1cyBzdGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7
CisgICAgICAgIAorICAgICAgICBhdXRvIGJsZXNzID0gWyZdIChjb25zdCBQdXRCeVN0YXR1cyYg
cmVzdWx0KSAtPiBQdXRCeVN0YXR1cyB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzSW5s
aW5lZChjb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIGJhc2VsaW5l
UmVzdWx0ID0gY29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywg
YmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsCisgICAgICAgICAgICAgICAgICAg
IGNhbGxFeGl0U2l0ZURhdGEpOworICAgICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdl
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1
cy5zdHViSW5mbykgeworICAgICAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+
b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0LT5v
cHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChzdGF0dXMucHV0U3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMu
cHV0U3RhdHVzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVC
bG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURh
dGEpOworfQorCitQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQpCit7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50
aWZpZXIudWlkKCk7CisgICAgaWYgKHBhcnNlSW5kZXgoKnVpZCkpCisgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAgIGlmIChzZXQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoKTsKKyAgICAKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgUHV0QnlTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0
YXRlID0gU2ltcGxlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgIAor
ICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsK
KworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOwor
ICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwor
ICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBXZSBj
YW4ndCBoYXZlIGEgdmFsaWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFt
ZUJ5SWRgIGRlZmluZSBtb2RlCisgICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUg
cmVkZWZpbmluZyBhIHByaXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtl
IAorICAgICAgICAgICAgLy8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAg
ICAgIGlmIChwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
V2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCBy
ZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhp
cyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRj
aHBvaW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFz
IHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAg
ICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0
aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8v
IEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0
byBoYXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2
ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKGlkZW50
aWZpZXIsIHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVu
ZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExp
a2VseVRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBXZSBjYW4gaGF2ZSBhIGNhc2Ugd2l0aCBQdXRQcml2YXRlTmFtZUJ5SWQgaW4g
c2V0IG1vZGUgYW5kIGl0CisgICAgICAgIC8vIHNob3VsZCBuZXZlciBjYXVzZSBhIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIGJlY2F1c2UgaXQgbWVhbnMgd2UgYXJlCisgICAgICAgIC8vIHRyeWluZyB0
byBzdG9yZSBpbiBhIG5vdCBpbnN0YWxsZWQgcHJpdmF0ZSBmaWVsZC4gV2UgbmVlZCB0byB0YWtl
CisgICAgICAgIC8vIHNsb3cgcGF0aCB0byB0aHJvdyBleGNwZXRpb24gaWYgaXQgZXZlciBnZXRz
IGV4ZWN1dGVkLgorICAgICAgICBpZiAocHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAg
ICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBC
ZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3
YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKyAgICAKKyAgICAgICAgLy8gRG9uJ3QgY2Fj
aGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5
VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25k
cyB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UK
KyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJp
bmdzLgorICAgICAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5pc09iamVjdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworICAgIAor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAg
IGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5k
LmlzTm9uZSgpKTsKKyAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICB2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2Vs
eVRha2VzU2xvd1BhdGgpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIFdlIG9ubHkgb3B0
aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9u
IGlzIGNhY2hlZCB0by4KKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAgICAg
ICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF0cmFu
c2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1Bh
dGgpOworICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAgICAg
ICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeVZhcmlhbnQ6OnRy
YW5zaXRpb24oaWRlbnRpZmllciwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQs
IG9mZnNldCkpOworICAgICAgICBpZiAoIWRpZEFwcGVuZCkKKyAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0
LnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIFB1
dEJ5U3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgor
ICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBNYWtlc0NhbGxzOgorICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2Fs
bHM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU2ltcGxlOiB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBp
ZiAobV92YXJpYW50c1tpXS5tYWtlc0NhbGxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB9Cit9CisK
K1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYg
KG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMobWFrZXNDYWxscygpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMgOiBP
YnNlcnZlZFRha2VzU2xvd1BhdGgpOworICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxz
KCkgPyBNYWtlc0NhbGxzIDogTGlrZWx5VGFrZXNTbG93UGF0aCk7Cit9CisKK0NhY2hlYWJsZUlk
ZW50aWZpZXIgUHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBzaW5nbGVJZGVudGlmaWVyRm9ySUNTdGF0dXMobV92YXJpYW50cyk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1dEJ5U3RhdHVzOjp2aXNpdEFnZ3JlZ2F0ZUlt
cGwoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6
IG1fdmFyaWFudHMpCisgICAgICAgIHZhcmlhbnQudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9
CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlTdGF0dXMpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisg
ICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIHZvaWQg
UHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRl
IHZvaWQgUHV0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0
QnlTdGF0dXM6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBmb3IgKFB1dEJ5VmFyaWFudCYgdmFy
aWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHV0QnlTdGF0dXM6Om1lcmdlKGNvbnN0IFB1dEJ5U3RhdHVzJiBvdGhlcikKK3sKKyAg
ICBpZiAob3RoZXIubV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIG1lcmdlU2xvdyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChvYnNlcnZlZFN0cnVj
dHVyZVN0dWJJbmZvU2xvd1BhdGgoKSB8fCBvdGhlci5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZv
U2xvd1BhdGgoKSkKKyAgICAgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2VzQ2FsbHMo
KSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMg
OiBPYnNlcnZlZFRha2VzU2xvd1BhdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdGhp
cyA9IFB1dEJ5U3RhdHVzKChtYWtlc0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1h
a2VzQ2FsbHMgOiBMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICB9OworCisgICAgc3dpdGNoICht
X3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICAqdGhpcyA9IG90aGVy
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBp
ZiAob3RoZXIubV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgICAgICByZXR1cm4gbWVyZ2VTbG93
KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIgOiBv
dGhlci5tX3ZhcmlhbnRzKSB7CisgICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgfQorICAgICAg
ICBzaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTGlr
ZWx5VGFrZXNTbG93UGF0aDoKKyAgICBjYXNlIE9ic2VydmVkVGFrZXNTbG93UGF0aDoKKyAgICBj
YXNlIE1ha2VzQ2FsbHM6CisgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoK
KyAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFB1dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQorICAgICAg
ICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3ZhcmlhbnRzLCBzZXQpOwor
ICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFy
aWFudC5maXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAobV92YXJp
YW50cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBOb0luZm9ybWF0aW9uOworfQorCit2
b2lkIFB1dEJ5U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJp
bnQoIihOb0luZm9ybWF0aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaW1wbGU6
CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQu
cHJpbnQoIkxpa2VseVRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
T2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQoIk9ic2VydmVkVGFrZXNT
bG93UGF0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAg
ICBvdXQucHJpbnQoIk1ha2VzQ2FsbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2Jz
ZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiT2JzZXJ2ZWRT
bG93UGF0aEFuZE1ha2VzQ2FsbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iZmM0NjhhMjg2ZWI1ZmI3MWY5MTdiODA4NGNjZGNhMGY0YTIyOGIwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmgKQEAg
LTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisj
aW5jbHVkZSAiRXhpdEZsYWcuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgorI2luY2x1ZGUg
IlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKyNpbmNs
dWRlICJTdHViSW5mb1N1bW1hcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVC
bG9jazsKK2NsYXNzIFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBTdHJ1Y3R1cmU7
CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCit0eXBl
ZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBw
cm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xhc3MgUHV0QnlTdGF0dXMgZmluYWwgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gU3RhdGUgewor
ICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAg
ICAgIE5vSW5mb3JtYXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0
b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCB3aWxsIGxp
a2VseSB0YWtlIHRoZSBzbG93IHBhdGguCisgICAgICAgIExpa2VseVRha2VzU2xvd1BhdGgsCisg
ICAgICAgIC8vIEl0J3Mga25vd24gdG8gdGFrZSBzbG93IHBhdGguIFdlIGFsc28gb2JzZXJ2ZWQg
dGhhdCB0aGUgc2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAg
ICAgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoLAorICAgICAgICAvLyBJdCB3aWxsIGxpa2VseSB0YWtl
IHRoZSBzbG93IHBhdGggYW5kIHdpbGwgbWFrZSBjYWxscy4KKyAgICAgICAgTWFrZXNDYWxscywK
KyAgICAgICAgLy8gSXQga25vd24gdG8gdGFrZSBwYXRocyB0aGF0IG1ha2UgY2FsbHMuIFdlIGFs
c28gb2JzZXJ2ZWQgdGhhdCB0aGUgc2xvdyBwYXRoIHdhcyB0YWtlbiBvbiBTdHJ1Y3R1cmVTdHVi
SW5mby4KKyAgICAgICAgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMsCisgICAgfTsKKyAg
ICAKKyAgICBQdXRCeVN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUHV0QnlTdGF0dXMoU3RhdGUgc3RhdGUp
CisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAg
ICAgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAgICAgICBjYXNlIE9ic2VydmVkVGFr
ZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBNYWtlc0NhbGxzOgorICAgICAgICBjYXNlIE9ic2Vy
dmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBQdXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
CisgICAgUHV0QnlTdGF0dXMoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6
IG1fc3RhdGUoU2ltcGxlKQorICAgIHsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFu
dCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Ym9vbCBpc0RpcmVjdCwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgCisgICAgc3RhdGljIFB1
dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01h
cCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiwgQ29kZU9yaWdpbik7CisKKyNp
ZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4pOworI2VuZGlmCisgICAgCisgICAgU3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9v
bCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CisgICAgYm9v
bCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkg
eworICAgICAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6CisgICAgICAgIGNhc2UgT2JzZXJ2
ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgYm9v
bCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAgUHV0QnlTdGF0dXMgc2xvd1ZlcnNpb24oKSBjb25z
dDsKKyAgICBib29sIG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IG1fc3RhdGUgPT0gT2Jz
ZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHM7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtVmFyaWFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rv
cjxQdXRCeVZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7
IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIHNpbmdsZUlkZW50aWZpZXIoKSBjb25zdDsKKyAgICAKKyAgICBERUNMQVJF
X1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAg
dm9pZCBtZXJnZShjb25zdCBQdXRCeVN0YXR1cyYpOworICAgIAorICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeVN0
YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsK
KyNlbmRpZgorICAgIHN0YXRpYyBQdXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayosIEJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQ
dXRCeVZhcmlhbnQmKTsKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgU3RhdGUg
bV9zdGF0ZTsKKyAgICBWZWN0b3I8UHV0QnlWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVZhcmlhbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwN2M1MzViMzc0MDQ4MTA5ZTY5YzkwYWQ4Yzlh
OWZmMjk0ODdjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmNwcApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQdXRCeVZhcmlhbnQuaCIKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJIZWFw
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUHV0QnlWYXJpYW50OjpQdXRCeVZhcmlh
bnQoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlcikKKyAgICA6IFB1dEJ5VmFyaWFudChvdGhlci5t
X2lkZW50aWZpZXIpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworUHV0QnlWYXJpYW50JiBQ
dXRCeVZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQoreworICAg
IG1fa2luZCA9IG90aGVyLm1fa2luZDsKKyAgICBtX29sZFN0cnVjdHVyZSA9IG90aGVyLm1fb2xk
U3RydWN0dXJlOworICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlvblNldDsKKyAgICBtX29mZnNldCA9
IG90aGVyLm1fb2Zmc2V0OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAg
ICBtX2NhbGxMaW5rU3RhdHVzID0gbWFrZVVuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1f
Y2FsbExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51
bGxwdHI7CisgICAgbV9pZGVudGlmaWVyID0gb3RoZXIubV9pZGVudGlmaWVyOworICAgIHJldHVy
biAqdGhpczsKK30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3Zl
KGlkZW50aWZpZXIpKTsKKyAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnRy
YW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJl
c3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9s
ZFN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7Cisg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29m
ZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQdXRCeVZhcmlhbnQgUHV0
QnlWYXJpYW50OjpzZXR0ZXIoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQoreworICAgIFB1dEJ5VmFyaWFudCByZXN1bHQo
V1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKKyAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSogUHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChraW5kKCkgPT0gVHJh
bnNpdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpIDw9IDIp
OworICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0tOykgewor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOworICAgICAg
ICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6Zml4VHJhbnNpdGlvblRv
UmVwbGFjZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoa2luZCgpICE9IFRyYW5zaXRpb24pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5z
aXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVb
aV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fbmV3U3RydWN0dXJlID0gbnVsbHB0cjsKKyAg
ICBtX2tpbmQgPSBSZXBsYWNlOworICAgIG1fY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jYWxsTGlua1N0YXR1cyk7Cit9
CisKK2Jvb2wgUHV0QnlWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICBjYXNlIFNldHRlcjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAg
ICAgIHJldHVybiBvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgY2FzZSBTZXR0
ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHV0QnlWYXJpYW50OjptYWtlc0NhbGxzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4ga2luZCgpID09IFNldHRlcjsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6
OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYgKCEh
bV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9pZGVudGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9p
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb2Zmc2V0ICE9
IG90aGVyLm1fb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFj
ZTogeworICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxh
Y2U6IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOworICAg
ICAgICAgICAgQVNTRVJUKG90aGVyLm1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdlKG90aGVyLm1fb2xkU3RydWN0
dXJlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgbmV3
VmFyaWFudCA9IG90aGVyOworICAgICAgICAgICAgaWYgKG5ld1ZhcmlhbnQuYXR0ZW1wdFRvTWVy
Z2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoKnRoaXMpKSB7CisgICAgICAgICAgICAgICAgKnRoaXMg
PSBuZXdWYXJpYW50OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgICAgICByZXR1cm4gYXR0
ZW1wdFRvTWVyZ2VUcmFuc2l0aW9uV2l0aFJlcGxhY2Uob3RoZXIpOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAgICAgaWYgKG1fb2xkU3RydWN0dXJl
ICE9IG90aGVyLm1fb2xkU3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fbmV3U3RydWN0dXJlICE9IG90aGVyLm1f
bmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9u
U2V0OworICAgICAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRo
KG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9u
U2V0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgU2V0dGVyOiB7CisgICAgICAgIGlmIChvdGhlci5tX2tpbmQgIT0g
U2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykgeworICAgICAgICAg
ICAgaWYgKCEobV9jYWxsTGlua1N0YXR1cyAmJiBvdGhlci5tX2NhbGxMaW5rU3RhdHVzKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9u
U2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Cisg
ICAgICAgICAgICBpZiAoIW1lcmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENv
bmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENv
bmRpdGlvblNldDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAg
ICAgICAgICAgbV9jYWxsTGlua1N0YXR1cy0+bWVyZ2UoKm90aGVyLm1fY2FsbExpbmtTdGF0dXMp
OworICAgICAgICAKKyAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1
Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQdXRC
eVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5
VmFyaWFudCYgcmVwbGFjZSkKK3sKKyAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOwor
ICAgIEFTU0VSVChyZXBsYWNlLm1fa2luZCA9PSBSZXBsYWNlKTsKKyAgICBBU1NFUlQobV9vZmZz
ZXQgPT0gcmVwbGFjZS5tX29mZnNldCk7CisgICAgQVNTRVJUKCFyZXBsYWNlLndyaXRlc1N0cnVj
dHVyZXMoKSk7CisgICAgQVNTRVJUKCFyZXBsYWNlLnJlYWxsb2NhdGVzU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQocmVwbGFjZS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOworICAgIAorICAgIC8v
IFRoaXMgc29ydCBvZiBtZXJnaW5nIG9ubHkgd29ya3Mgd2hlbiB3ZSBoYXZlIG9uZSBwYXRoIGFs
b25nIHdoaWNoIHdlIGFkZCBhIG5ldyBmaWVsZCB3aGljaAorICAgIC8vIHRyYW5zaXRpb25zIHRv
IHN0cnVjdHVyZSBTIHdoaWxlIHRoZSBvdGhlciBwYXRoIHdhcyBhbHJlYWR5IG9uIHN0cnVjdHVy
ZSBTLiBUaGlzIGRvZXNuJ3QKKyAgICAvLyB3b3JrIGlmIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBh
bnl0aGluZyBvciBpZiB0aGUgcmVwbGFjZSBwYXRoIGlzIHBvbHltb3JwaGljLgorICAgIAorICAg
IGlmIChyZWFsbG9jYXRlc1N0b3JhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmIChyZXBsYWNlLm1fb2xkU3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSAhPSBtX25ld1N0
cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fb2xkU3RydWN0dXJl
Lm1lcmdlKG1fbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwo
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7Cit9CisKK0RFRklORV9WSVNJVF9BR0dSRUdBVEUoUHV0QnlWYXJpYW50KTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIG1fb2xkU3RydWN0dXJlLm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgIGlmIChtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgbV9uZXdTdHJ1Y3R1cmUtPm1h
cmtJZkNoZWFwKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFy
a0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVZhcmlh
bnQ6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CisKK2Jvb2wgUHV0QnlWYXJpYW50OjpmaW5h
bGl6ZShWTSYgdm0pCit7CisgICAgaWYgKCFtX29sZFN0cnVjdHVyZS5pc1N0aWxsQWxpdmUodm0p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbmV3U3RydWN0dXJlICYmICF2bS5o
ZWFwLmlzTWFya2VkKG1fbmV3U3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKHZtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzICYmICFtX2NhbGxMaW5rU3RhdHVzLT5maW5h
bGl6ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBk
dW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUHV0QnlWYXJpYW50OjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiPCIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmll
ciwgIicsICIpOworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAg
ICAgIG91dC5wcmludCgiZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiUmVwbGFjZTog
IiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0
KCksICIsICIsICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFu
c2l0aW9uOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiVHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiB0byAiLAorICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKKyAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIlNldHRlcjog
IiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCisgICAgICAgICAgICBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSIpOworICAgICAgICBvdXQucHJp
bnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9
ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeVZhcmlhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTQwMmI0MjU2YWRlN2UwNTY1MGE5ZmYw
ZjY4NDVlYzFiMzFlYjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5
T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDYWxsTGlua1N0YXR1czsKKworY2xhc3MgUHV0QnlWYXJpYW50IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBO
b3RTZXQsCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFNl
dHRlcgorICAgIH07CisgICAgCisgICAgUHV0QnlWYXJpYW50KENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllcikKKyAgICAgICAgOiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2Zmc2V0
KGludmFsaWRPZmZzZXQpCisgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAg
ICAgLCBtX2lkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmKTsKKyAgICBQdXRCeVZhcmlh
bnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeVZhcmlhbnQmKTsKKworICAgIHN0YXRpYyBQdXRCeVZh
cmlhbnQgcmVwbGFjZShDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCB0cmFuc2l0aW9u
KENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
LCBQcm9wZXJ0eU9mZnNldCk7CisgICAgCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCBzZXR0ZXIo
Q2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPik7CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBOb3RT
ZXQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Cisg
ICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAg
ICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVy
KTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBr
aW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpCisgICAgeworICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7CisgICAgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0OworICAgIAor
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3Nhcnko
KTsKKworICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3Q7CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CisgICAg
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3ZSBkaWQp
IGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIEludHJpbnNpYyBp
bnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQorCisgICAgLy8gVGhpcyBp
cyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgorICAgIGJvb2wgaXNQcm9wZXJ0eVVuc2V0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBt
X29mZnNldDsKKyAgICB9CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKKyAgICAg
ICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBhdHRl
bXB0VG9NZXJnZShjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKTsKKyAgICAKKyAgICBERUNMQVJF
X1ZJU0lUX0FHR1JFR0FURTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIG1h
cmtJZkNoZWFwKFZpc2l0b3ImKTsKKyAgICBib29sIGZpbmFsaXplKFZNJik7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgYm9v
bCBvdmVybGFwcyhjb25zdCBQdXRCeVZhcmlhbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYg
KCEhbV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChtX2lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmICht
X2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3Zlcmxh
cHMob3RoZXIuc3RydWN0dXJlU2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGF0
dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5VmFyaWFudCYgcmVw
bGFjZSk7CisgICAgCisgICAgS2luZCBtX2tpbmQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CisgICAgU3RydWN0dXJlU2V0IG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9u
ZXdTdHJ1Y3R1cmUgeyBudWxscHRyIH07CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bV9jb25kaXRpb25TZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2Nh
bGxMaW5rU3RhdHVzOworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKaW5kZXggMGM0YzA3NDdhMGFiODVmYjNhZjgxN2Qy
OTQ1ZDYyMWFkYzNlYmFkNy4uZmNlMGY0ZDhlZTEwZWRkYmNmM2M3NTRlZjgzM2EzNWJlOTdkYmMx
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3Rh
dHVzZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0
YXR1c2VzLmNwcApAQCAtNjIsMTAgKzYyLDEwIEBAIEdldEJ5U3RhdHVzKiBSZWNvcmRlZFN0YXR1
c2VzOjphZGRHZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLVB1dEJ5SWRTdGF0dXMqIFJlY29yZGVkU3RhdHVz
ZXM6OmFkZFB1dEJ5SWRTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3Qg
UHV0QnlJZFN0YXR1cyYgc3RhdHVzKQorUHV0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFk
ZFB1dEJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnN0IFB1dEJ5U3Rh
dHVzJiBzdGF0dXMpCiB7Ci0gICAgYXV0byBzdGF0dXNQdHIgPSBtYWtlVW5pcXVlPFB1dEJ5SWRT
dGF0dXM+KHN0YXR1cyk7Ci0gICAgUHV0QnlJZFN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdl
dCgpOworICAgIGF1dG8gc3RhdHVzUHRyID0gbWFrZVVuaXF1ZTxQdXRCeVN0YXR1cz4oc3RhdHVz
KTsKKyAgICBQdXRCeVN0YXR1cyogcmVzdWx0ID0gc3RhdHVzUHRyLmdldCgpOwogICAgIHB1dHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvZGVPcmlnaW4sIFdURk1vdmUoc3RhdHVzUHRyKSkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBSZWNvcmRlZFN0
YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwoVmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBnZXRzKQogICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcHV0cykKKyAgICAgICAgcGFpci5zZWNv
bmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAoYXV0byYgcGFpciA6IGlucykK
ICAgICAgICAgcGFpci5zZWNvbmQtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIGZvciAo
YXV0byYgcGFpciA6IGRlbGV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlY29yZGVkU3RhdHVzZXMuaAppbmRleCBiZDE1NzA1NDU3MzgwYzM3N2I4NDI4NmQ1M2Fh
ODY4YTMyNjMyNGI1Li45NDk4M2RiYzc2N2QwN2UyODA0YmQ0NDJjMzdlYjU0Y2Y0NTdiYThkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNl
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEZWxldGVCeVN0YXR1cy5oIgogI2luY2x1
ZGUgIkdldEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiSW5CeVN0YXR1cy5oIgotI2luY2x1ZGUgIlB1
dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlNldFBy
aXZhdGVCcmFuZFN0YXR1cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAg
c3RydWN0IFJlY29yZGVkU3RhdHVzZXMgewogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBhZGRD
YWxsTGlua1N0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgQ2FsbExpbmtTdGF0dXMmKTsK
ICAgICBHZXRCeVN0YXR1cyogYWRkR2V0QnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0
IEdldEJ5U3RhdHVzJik7Ci0gICAgUHV0QnlJZFN0YXR1cyogYWRkUHV0QnlJZFN0YXR1cyhjb25z
dCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlJZFN0YXR1cyYpOworICAgIFB1dEJ5U3RhdHVzKiBh
ZGRQdXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgUHV0QnlTdGF0dXMmKTsKICAg
ICBJbkJ5U3RhdHVzKiBhZGRJbkJ5U3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBJbkJ5
U3RhdHVzJik7CiAgICAgRGVsZXRlQnlTdGF0dXMqIGFkZERlbGV0ZUJ5U3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mLCBjb25zdCBEZWxldGVCeVN0YXR1cyYpOwogICAgIENoZWNrUHJpdmF0ZUJyYW5k
U3RhdHVzKiBhZGRDaGVja1ByaXZhdGVCcmFuZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29u
c3QgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMmKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFJl
Y29yZGVkU3RhdHVzZXMgewogICAgIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPj4+IGNhbGxzOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPEdldEJ5U3RhdHVzPj4+IGdldHM7Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlJZFN0
YXR1cz4+PiBwdXRzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlx
dWVfcHRyPFB1dEJ5U3RhdHVzPj4+IHB1dHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3Jp
Z2luLCBzdGQ6OnVuaXF1ZV9wdHI8SW5CeVN0YXR1cz4+PiBpbnM7CiAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8RGVsZXRlQnlTdGF0dXM+Pj4gZGVsZXRl
czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1cz4+PiBjaGVja1ByaXZhdGVCcmFuZHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA3
NTkxOGY2NzczMTgzY2RmY2ViMjNkYzNjYzIxZDMyN2U5ZmExODY4Li5mMjdiNzM3NGVmOWFlZTEw
N2E3MDE2ZGE4ODFiY2VkZjc4MTlkNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTI4MSw4ICsyODEsMTEgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGMKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lOgogICAgICAgICByZXNldEdldEJ5KGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5S2luZDo6UHJp
dmF0ZU5hbWUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKLSAg
ICAgICAgcmVzZXRQdXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlJZDoKKyAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtp
bmQ6OkJ5SWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKICAgICAgICAg
cmVzZXRJbkJ5KGNvZGVCbG9jaywgKnRoaXMsIEluQnlLaW5kOjpCeUlkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggNzMw
NGZiMTU0ZTg0MGQ4NWRhMjhlNmUyNTAxYWFiMThlNTVkNDFhNC4uZTY3YmMxMDhiZTMyMGRkNmQy
NTllNzdjODFiOWQ1MWM0NWNmNTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKQEAgLTU0LDcgKzU0LDggQEAgZW51bSBjbGFz
cyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeUlkRGlyZWN0LAogICAgIFRyeUdldEJ5
SWQsCiAgICAgR2V0QnlWYWwsCi0gICAgUHV0LAorICAgIFB1dEJ5SWQsCisgICAgUHV0QnlWYWws
CiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC0zNjUs
NiArMzY2LDcgQEAgY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBHUFJSZWcgYnJh
bmRHUFI7CiAgICAgfSByZWdzOwogICAgIEdQUlJlZyBtX3N0dWJJbmZvR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEdQUlJlZyBtX2FycmF5UHJvZmlsZUdQUiB7IEludmFsaWRHUFJSZWcgfTsK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUjsKICAgICAvLyBG
SVhNRTogWzMyLWJpdHNdIENoZWNrIGlmIFN0cnVjdHVyZVN0dWJJbmZvOjpiYXNlVGFnR1BSIGlz
IHVzZWQgc29tZXdoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQxYzBiNDZhNmE5MDczOTAz
NTlkZDMwYzBjZTY4YzExYzE3YjI4MjEuLjA3YzJkMWYzNWRiMmY1OTQ2MWE0OTc0OTVhM2ZhMmM3
NDQ2Yzc3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRl
ICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNs
dWRlICJOdW1iZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNp
bmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1
ZGUgIlNldFByaXZhdGVCcmFuZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpA
QCAtMzk3Myw3ICszOTczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAg
IGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAgICAgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOwogICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZVNldCB0aGlzU2V0ID0g
Km1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogICAgICAg
ICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0Vt
cHR5KCkpCkBAIC0zOTgyLDcgKzM5ODIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOwogICAgICAg
ICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1
cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwog
ICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSBuZXdTdHJ1Y3R1
cmUpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMzk5MCw3
ICszOTkwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICB9IC8v
IGVsc2UgdGhpcyBpcyByZWFsbHkgYSByZXBsYWNlLgogICAgICAgICAgICAgICAgIG5ld1NldC5h
ZGQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNl
KTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UodGhpc1NldCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTQxNDAsMTAgKzQxNDAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkgJiYgdmFsdWUubV9z
dHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUt
Pm9wKCkgPT0gUHV0QnlJZERpcmVjdCB8fCBub2RlLT5vcCgpID09IFB1dFByaXZhdGVOYW1lQnlJ
ZDsKICAgICAgICAgICAgIGF1dG8gcHJpdmF0ZUZpZWxkUHV0S2luZCA9IG5vZGUtPm9wKCkgPT0g
UHV0UHJpdmF0ZU5hbWVCeUlkID8gbm9kZS0+cHJpdmF0ZUZpZWxkUHV0S2luZCgpIDogUHJpdmF0
ZUZpZWxkUHV0S2luZDo6bm9uZSgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3Rh
dHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2
YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgICAgIG5vZGUt
PmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5jYWNo
ZWFibGVJZGVudGlmaWVyKCksCiAgICAgICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVs
ZFB1dEtpbmQpOwogCiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSB0cnVlOwpAQCAtNDE1MSw3
ICs0MTUxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVj
dG9yIHRyYW5zaXRpb25zOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgeworICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoQ29uZGl0aW9uKGNvbmRpdGlvbikp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gZmFsc2U7CkBAIC00MTYy
LDE0ICs0MTYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAg
ICAgIGlmICghYWxsR29vZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9u
cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSksIG5ld1N0cnVjdHVyZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CkBAIC00NDczLDcgKzQ0NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzOgpAQCAtNDY1MiwxMCArNDY1MiwxMCBAQCB2b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJJQ1N0YXR1cyhOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1
czogeworICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1f
c3RydWN0dXJlLmlzRmluaXRlKCkpCi0gICAgICAgICAgICBub2RlLT5wdXRCeUlkU3RhdHVzKCkt
PmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAg
IG5vZGUtPnB1dEJ5U3RhdHVzKCktPmZpbHRlcih2YWx1ZS5tX3N0cnVjdHVyZS50b1N0cnVjdHVy
ZVNldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRl
eCBjMjE2YTM5NmQ3MTYwNDIwZGZiNDgxNWYxMjdlNzg1OWQ1YTkxNzNiLi42ZTI3NTMxMDRiZDM4
MTU5Y2NiMWIxZDM5MzcxNTM4NmI2NDg2YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTQw
Miw3ICs0MDIsNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICAgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTEyNjUsNyArMTI2NSw3IEBAIGNsYXNzIEFyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAg
ICAgICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDYzZTY4ZDAzN2ZlMTExMDFhZTQxMmEyNzgyMjUzZjU5NDNi
ZDYyN2IuLmQyNmNjMmE4MDA1M2Y1M2NkNDljYjI1MjNlZGE3OTg4MGEwMjE1ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zMyw3
ICszMyw2IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJCb29sZWFu
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJCeVZh
bEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKQEAgLTc0LDcgKzczLDcgQEAKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdl
dHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJ
ZEZsYWdzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3Rh
dHVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTIzOSwxMSAr
MjM4LDExIEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICBib29sIGNoZWNrUHJlc2VuY2Uo
SlNPYmplY3QqIGtub3duQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBjaGVja1ByZXNlbmNlRm9yUmVwbGFjZShO
b2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1
Y3R1cmVTZXQmKTsKICAgICAKLSAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFu
ZCB0aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlJZFZhcmlhbnQuCisgICAgLy8gV29ya3Mgd2l0aCBi
b3RoIEdldEJ5VmFyaWFudCBhbmQgdGhlIHNldHRlciBmb3JtIG9mIFB1dEJ5VmFyaWFudC4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYW50VHlwZT4KICAgICBOb2RlKiBsb2FkKFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBjb25zdCBWYXJp
YW50VHlwZSYpOwogCi0gICAgTm9kZSogc3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgUHV0QnlJZFZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogc3Rv
cmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50Jiwg
Tm9kZSogdmFsdWUpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgdm9pZCBwYXJz
ZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTI1MywxMyArMjUyLDEzIEBAIGNsYXNz
IEJ5dGVDb2RlUGFyc2VyIHsKICAgICB2b2lkIGhhbmRsZUdldFByaXZhdGVOYW1lQnlJZCgKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBHZXRCeVN0YXR1cyk7CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgKLSAgICAgICAgTm9k
ZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlk
U3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOworICAgICAgICBOb2RlKiBiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5U3RhdHVzJiwgYm9v
bCBpc0RpcmVjdCwgRUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKLSAgICAgICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBOb2RlKiBiYXNl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2
YWx1ZSwgY29uc3QgUHV0QnlTdGF0dXMmLAogICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRlY29k
ZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVQdXRQcml2
YXRlTmFtZUJ5SWQoCi0gICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVz
JiwgUHJpdmF0ZUZpZWxkUHV0S2luZCk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQ
dXRCeVN0YXR1cyYsIFByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxl
dGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5
U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC00NTE0LDcgKzQ1MTMsNyBAQCBOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6bG9hZCgKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0aGUg
cHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwg
b2YKICAgICAgICAgICAgICAgICAvLyB0aGUgc3RydWN0dXJlcyBpbiB0aGUgdmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKSBhZ3JlZSBvbiB0aGUgcHJvdG90eXBlIChpdCB3b3VsZCBiZQogICAgICAgICAg
ICAgICAgIC8vIGhpbGFyaW91c2x5IHJhcmUgaWYgdGhleSBkaWRuJ3QpLiBOb3RlIHRoYXQgd2Ug
YXJlIHJlbHlpbmcgb24gc3RydWN0dXJlU2V0KCkgaGF2aW5nCi0gICAgICAgICAgICAgICAgLy8g
YXQgbGVhc3Qgb25lIGVsZW1lbnQuIFRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBoZXJlIGJlY2F1
c2Ugb2YgaG93IEdldEJ5U3RhdHVzL1B1dEJ5SWRTdGF0dXMgd29yay4KKyAgICAgICAgICAgICAg
ICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4gVGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUg
YmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMvUHV0QnlTdGF0dXMgd29yay4KIAogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiByaWdodCBub3csIGlmIHdlIGhhdmUgYW4gT1BDUywgd2UgaGF2ZSBt
b25vIHByb3RvLiBIb3dldmVyLCB0aGlzIHdpbGwKICAgICAgICAgICAgICAgICAvLyBuZWVkIHRv
IGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlIGhhdmUgYSBoeWJyaWQgZGF0YSBzdHJ1
Y3R1cmUgZm9yCkBAIC00NTkzLDkgKzQ1OTIsOSBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpz
dG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50
LCBOb2RlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VGb3JSZXBs
YWNlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZz
ZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7CiAgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0
KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKQEAgLTQ5OTgsMzkg
KzQ5OTcsMzkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5CeUlkKFZpcnR1YWxSZWdp
c3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGUKIH0KIAogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdFB1dEJ5SWQoCi0gICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1
cywgYm9vbCBpc0RpcmVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgTm9kZSogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlTdGF0
dXMmIHB1dEJ5U3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAg
ICBpZiAoaXNEaXJlY3QpCiAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZv
KGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNlLCB2YWx1ZSk7CiAgICAgZWxzZQot
ICAgICAgICBhZGRUb0dyYXBoKHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gUHV0QnlJZEZs
dXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1vZGUpLCBiYXNl
LCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgocHV0QnlTdGF0dXMubWFrZXNDYWxscygpID8g
UHV0QnlJZEZsdXNoIDogUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oZWNtYU1v
ZGUpLCBiYXNlLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3Rh
dHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJ
bmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3Rh
dHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCiB7Ci0gICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkg
ewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3Rh
dHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6
OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgp
KQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICBlbWl0UHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVj
bWFNb2RlKTsKKyAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1
dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7Ci0gICAgICAg
IGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBwdXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMo
KQorICAgIGlmIChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgeworICAgICAgICBpZiAo
IW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwgcHV0QnlTdGF0dXMubWFrZXNDYWxscygpCiAgICAg
ICAgICAgICB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZygpCi0gICAg
ICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5
bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewotICAgICAgICAgICAgZW1pdFB1dEJ5
SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21h
TW9kZSk7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9u
czo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKKyAgICAgICAgICAg
IGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJp
YW50SW5kZXggPSBwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykg
ewotICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgp
ICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCB2YXJpYW50SW5kZXggPSBwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBpZiAocHV0QnlTdGF0dXNbdmFyaWFudEluZGV4XS5raW5k
KCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHB1dEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9k
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhd
LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC01MDM5LDI4ICs1MDM4LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAg
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwog
Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3Jp
Z2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVy
UHV0QnlTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAK
LSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0
dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKQogICAgICAgICAgICAgICAgIG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7Ci0gICAgICAgIGRhdGEtPnZh
cmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT52YXJpYW50
cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZz
ZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAg
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIEFT
U0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNvbnN0IFB1dEJ5VmFy
aWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwogICAgIAogICAgIHN3aXRjaCAodmFyaWFu
dC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1
dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsK
KyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpKQpAQCAtNTA2OCwxMiArNTA2NywxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb246IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQ
dXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNl
KTsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjogeworICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSks
IGJhc2UpOwogCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwogICAg
ICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkpKSB7Ci0gICAgICAgICAgICBl
bWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJl
Y3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC01MTM1LDEyICs1MTM0LDEyIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgUHV0QnlJZFZhcmlhbnQ6OlNldHRlcjogewotICAgICAgICBhZGRUb0dyYXBoKEZp
bHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
KCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSks
IGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJpYW50OjpTZXR0ZXI6IHsKKyAgICAgICAgYWRkVG9H
cmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykp
LCBiYXNlKTsKIAogICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhl
ciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVk
VmFsdWUpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVl
LCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICAgICAgZW1pdFB1
dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNt
YU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTE4
NCwyNiArNTE4MywyNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAg
IH0KICAgICAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAg
ICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KIH0KIAogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgIE5vZGUqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kKQorICAgIGNvbnN0IFB1dEJ5U3Rh
dHVzJiBwdXRCeVN0YXR1cywgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5k
KQogewotICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpIHx8ICFwdXRCeUlkU3RhdHVz
Lm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKLSAgICAg
ICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpCisgICAgaWYgKCFwdXRCeVN0YXR1cy5pc1Np
bXBsZSgpIHx8ICFwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nl
c3NJbmxpbmluZygpKSB7CisgICAgICAgIGlmICghcHV0QnlTdGF0dXMuaXNTZXQoKSkKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgYWRkVG9HcmFwaChQdXRQ
cml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByaXZhdGVGaWVsZFB1
dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dy
YXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYg
KHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5t
X3BsYW4uaXNGVEwoKSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8
ICFPcHRpb25zOjp1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8
IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmdMaXN0U2l6ZSgpKSB7CisgICAgICAgICAgICB8fCBwdXRCeVN0YXR1cy5udW1W
YXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXpl
KCkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0UHJpdmF0ZU5hbWVCeUlkLCBPcEluZm8o
aWRlbnRpZmllciksIE9wSW5mbyhwcml2YXRlRmllbGRQdXRLaW5kKSwgYmFzZSwgdmFsdWUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MjExLDI5ICs1MjEwLDI5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKICAgICAgICAgaWYg
KFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNv
bXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAgICAgCi0gICAgICAgIGFkZFRv
R3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVk
U3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRT
dGF0dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3Vy
cmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCi0gICAgICAgIGZv
ciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRz
KCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeVN0
YXR1cy52YXJpYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJl
IDogdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5t
X211bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOwotICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1
dEJ5SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeVN0
YXR1cy52YXJpYW50cygpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
Zmllck51bWJlcjsKICAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0LCBPcEluZm8o
ZGF0YSksIGJhc2UsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBB
U1NFUlQocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOwotICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICBBU1NFUlQocHV0QnlT
dGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlh
bnQgPSBwdXRCeVN0YXR1c1swXTsKICAgICAKICAgICBzd2l0Y2ggKHZhcmlhbnQua2luZCgpKSB7
Ci0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZTogeworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpSZXBsYWNlOiB7CiAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0
KCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29k
ZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgICAgICBhZGRUb0dyYXBoKEZp
bHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2Up
OwogICAgIAogICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2
YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAt
NTI0MSw5ICs1MjQwLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0UHJpdmF0ZU5h
bWVCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGNhc2UgUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb246IHsKKyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbjog
ewogICAgICAgICBBU1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpKTsKLSAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4u
cmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwg
cHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKICAgICAKICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hl
Y2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKQEAgLTY0NTQsNDAgKzY0NTMsMzAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgYm9vbCB0
cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5nZXQoQ29kZU9yaWdpbihjdXJyZW50Q29k
ZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFsSW5mbzsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGlu
ZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAgICAgLy8gQXQgdGhh
dCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4gRm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwg
d2UgbWlnaHQgaGF2ZSBzb21lIGluZm8gZnJvbQotICAgICAgICAgICAgICAgIC8vIExMSW50IElD
LCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwgdGhhdCB3ZSBjb3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90
IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAg
ICAgICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAg
ICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgKLSAgICAgICAgICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmll
ci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAgICAg
ICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVy
LmNlbGwoKSk7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQorICAgICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRUeXBlKQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVl
KSkgewogCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBP
cEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFj
aywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0
YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmln
aW4oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworCisgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlm
aWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBieXRlY29kZS5tX3B1dEtpbmQpOworICAgICAgICAg
ICAgICAgICAgICB0cnlDb21waWxlQXNQdXRCeU9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodHJ5Q29tcGlsZUFzUHV0QnlP
ZmZzZXQpCi0gICAgICAgICAgICAgICAgaGFuZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBieXRlY29k
ZS5tX3B1dEtpbmQpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCF0cnlDb21w
aWxlQXNQdXRCeU9mZnNldCkKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVO
YW1lLCBPcEluZm8oKSwgT3BJbmZvKGJ5dGVjb2RlLm1fcHV0S2luZCksIGJhc2UsIHByb3BlcnR5
LCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9wcml2YXRlX25hbWUp
OwpAQCAtNjU2NywxMiArNjU1NiwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIGJvb2wg
ZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwogCi0gICAgICAgICAgICBQdXRC
eUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAg
ICAgICAgICAgUHV0QnlTdGF0dXMgcHV0QnlTdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRl
eHRTdGFjaywKLSAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRD
b2RlT3JpZ2luKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBi
eXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChi
YXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVy
TnVtYmVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGRpcmVjdCwgbmV4dE9wY29kZUluZGV4KCksIGJ5
dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTc5NzksMTMgKzc5NjgsMTMgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBp
ZiAoIW1fZ3JhcGgud2F0Y2hHbG9iYWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJO
dW1iZXIpKQogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAK
LSAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBQ
dXRCeVN0YXR1cyBzdGF0dXM7CiAgICAgICAgICAgICAgICAgaWYgKHVpZCkKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgdWlkLCBmYWxzZSwgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVp
ZCksIGZhbHNlLCBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0QnlJZFN0YXR1cyhQdXRCeUlk
U3RhdHVzOjpUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUHV0
QnlTdGF0dXMoUHV0QnlTdGF0dXM6Okxpa2VseVRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAg
ICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxCi0gICAgICAgICAgICAgICAgICAgIHx8
IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UKKyAgICAgICAgICAg
ICAgICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UKICAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZSgpLnNpemUoKSAhPSAxKSB7
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCkpLCBPcEluZm8oYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLmVjbWFNb2RlKCkpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29kZS5t
X3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODgxNCw2MiArODgwMyw3
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRl
Y29kZSBieXRlY29kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgpCiB7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKICAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CiAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92
YWx1ZSk7CiAgICAgYm9vbCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKICAgICBib29sIGNvbXBpbGVkQXNQdXRCeUlkID0gZmFsc2U7Ci0gICAg
ewotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7Ci0gICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1czsKLSAgICAgICAgewotICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAuZ2V0KENvZGVPcmlnaW4oY3VycmVudENv
ZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KCkpKS5ieVZhbEluZm87Ci0gICAgICAgICAgICAvLyBG
SVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBK
SVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0gICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUs
IHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAg
ICAgICAgICAgICAgICAmJiBieVZhbEluZm8tPnN0dWJJbmZvCi0gICAgICAgICAgICAgICAgJiYg
IWJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoCi0gICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50
KQotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQotICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gYnlWYWxJbmZvLT5jYWNoZWRJ
ZDsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpLmVuc3VyZShpZGVudGlmaWVyLnVpZCgpKTsKLSAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwot
ICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBmcm96
ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CiAKKyAgICBQdXRC
eVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWND
b250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpOworCisgICAgaWYgKCFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVu
dCkKKyAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpCisgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZh
bHVlKSkgeworICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3Rh
dHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAg
aWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSog
ZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOwogICAgICAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgpKQogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5
KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF1
aWQtPmlzU3ltYm9sKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcElu
Zm8odWlkKSwgcHJvcGVydHkpOworCisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JF
eGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOworICAgICAgICAgICAgY29tcGlsZWRBc1B1
dEJ5SWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cy50YWtlc1Nsb3dQYXRoKCkp
IHsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN0YXR1cyBpcyB0YWtpbmcgYSBzbG93IHBh
dGgsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBub2RlIHN0aWxsIGhhcyBjb25zdGFudCBpZGVu
dGlmaWVyIGFuZCB1c2luZyBQdXRCeUlkIGlzIGFsd2F5cyBiZXR0ZXIgaW4gdGhhdCBjYXNlLgor
ICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG51bGxwdHI7CisgICAgICAgICAg
ICBKU0NlbGwqIHByb3BlcnR5Q2VsbCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0byog
c3ltYm9sID0gcHJvcGVydHktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8U3ltYm9sKj4oKm1fdm0pKSB7
CisgICAgICAgICAgICAgICAgdWlkID0gJnN5bWJvbC0+dWlkKCk7CisgICAgICAgICAgICAgICAg
cHJvcGVydHlDZWxsID0gc3ltYm9sOworICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhzeW1ib2wpOworICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChhdXRvKiBzdHJpbmcgPSBwcm9wZXJ0eS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU1N0cmluZyo+KCptX3ZtKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBpbXBs
ID0gc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsgaW1wbC0+aXNBdG9tKCkgJiYgIXBhcnNlSW5k
ZXgoKmNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KGltcGwpKSkgeworICAgICAgICAgICAgICAgICAg
ICB1aWQgPSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlDZWxsID0gc3RyaW5nOworICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmZyZWV6ZVN0cm9uZyhzdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSWRlbnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2Vy
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7Ci0KKyAgICAg
ICAgICAgIGlmICh1aWQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1aWQpOworICAgICAgICAgICAgICAg
IGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwo
cHJvcGVydHlDZWxsKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHN0YXR1cywgaXNEaXJlY3Qs
IG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CisgICAgICAgICAgICAgICAgY29t
cGlsZWRBc1B1dEJ5SWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNl
LCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNE
aXJlY3QsIG9zckV4aXRJbmRleCwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CiAgICAgfQogCiAgICAg
aWYgKCFjb21waWxlZEFzUHV0QnlJZCkgewotICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0g
Z2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJy
YXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOwogCiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2Up
OwogICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgIGFkZFZhckFyZ0No
aWxkKHZhbHVlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIExlYXZlIHJv
b20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIp
OyAvLyBMZWF2ZSByb29tIGZvciBsZW5ndGguCi0gICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFsRGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8oYnl0ZWNvZGUubV9lY21hTW9kZSkpOworICAgICAgICBOb2Rl
KiBwdXRCeVZhbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFs
RGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oYnl0
ZWNvZGUubV9lY21hTW9kZSkpOwogICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBQdXRCeVZh
bCBhbmQgUHV0QnlWYWxEaXJlY3QgbXVzdCBiZSB0cmVhdGVkIGFzIGlmIHRoZXkgY2xvYmJlciBl
eGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIHRoZW0gZ2VuZXJpYy4KKyAgICAg
ICAgaWYgKHN0YXR1cy5vYnNlcnZlZFN0cnVjdHVyZVN0dWJJbmZvU2xvd1BhdGgoKSkKKyAgICAg
ICAgICAgIG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuYWRkKHB1dEJ5VmFsKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOTE2NDcwZDE3
ZDUzYWYzNTZiZDUxNDRjOTRlNjA3ZGEwNzk1OGI0YS4uNmYyMDRkMmM1ZGUwYTYxMmY3MzFjOTU3
YjQ2MWRjZjMwYzRhMTFhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKQEAgLTU2OSw3ICs1NjksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNh
c2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCmluZGV4IDg2YTNkMDc2NjRkN2ZhOTI3NTEy
OTk3NzlmNDZmMTk3MmIwYWQwZjMuLjRjZTlmZjBlYjVkYTUxMGVjMjM0MDY0NjJhNzFlODgwOTUw
OTYyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlT
dGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVs
ZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKaW5kZXggZWFlYWY4NWVhMjU0MTcyNTc1NWY0OGNlZmRlZGUwM2I4MWM5ZmEyYS4uYjg4
MjVhY2FlMzRlNTVmODkyNjU5MTI5ODQxZDkzMjRhNDBjMTYxNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5U3RhdHVz
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIK
KyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUwMSw3ICs1MDEsNyBAQCBjbGFz
cyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAg
CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5VmFyaWFu
dCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQub2xkU3RydWN0dXJlKCkuZ2VuZXJpY0ZpbHRlcihbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJl
KSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuY29u
dGFpbnMobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpKTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CkBAIC01MTMsMTEgKzUxMyw5IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6
VHJhbnNpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYW50ID0gUHV0QnlWYXJpYW50OjpyZXBsYWNlKHZhcmlhbnQuaWRlbnRpZmll
cigpLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw3ICsxMjExLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xk
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9m
ZnNldChkYXRhLCBwcm9wZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgfQogCi0gICAgdm9p
ZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBjb25z
dCBBYnN0cmFjdFZhbHVlJiBiYXNlVmFsdWUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZVZhbHVlLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIpCiAgICAgewogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsK
ICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKQEAgLTEyMjQsNyArMTIy
Miw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAg
ICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAgICAgICBUcmFuc2l0
aW9uKiB0cmFuc2l0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIHRyYW5zaXRpb24g
PSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAg
fQpAQCAtMTI2OSw3ICsxMjY3LDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChkYXRhLCBwcm9w
ZXJ0eVN0b3JhZ2UsIGNoaWxkRWRnZSk7CiAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBj
YW5FeGl0OwogCi0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50
OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICBpZiAoZGlkQWxsb2NhdGVTdG9yYWdlKSB7CiAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0
ZXJmbHksCkBAIC0xNDA2LDEwICsxNDA0LDEwIEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKICAgICAgICAgaWYgKCFiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBQdXRCeUlkU3RhdHVzIHN0
YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIFB1dEJ5U3RhdHVzIHN0
YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgIGJhc2VWYWx1ZS5tX3N0
cnVjdHVyZS50b1N0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRl
bnRpZmllcigpLnVpZCgpLAorICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LAogICAgICAgICAgICAgaXNEaXJlY3QsIHByaXZhdGVGaWVsZFB1dEtpbmQpOwogCiAgICAgICAg
IGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCkBAIC0xNDI0LDggKzE0MjIsOCBAQCBjbGFzcyBDb25z
dGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAKICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7
Ci0gICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFy
aWFudHMoKSkgewotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJp
YW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiB2YXJpYW50LmNvbmRpdGlv
blNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLndhdGNoQ29uZGl0aW9u
KGNvbmRpdGlvbikpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDgs
NyArMTQ0Niw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCkpLCBuZXdTdHJ1Y3R1cmUpKTsKICAgICAgICAg
ICAgICAgICBuZXdTZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNOb25lKCkgfHwgcHJpdmF0ZUZpZWxkUHV0S2luZC5pc1NldCgpKTsKICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmlhbnQuY29uZGl0aW9uU2V0KCku
aXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKTsKQEAgLTE0NjQsOCArMTQ2Miw4IEBA
IGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgYWxy
ZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBm
b2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5
SWRTdGF0dXMsIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2VtYW50
aWMsIHN0YXR1cykpLAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVy
UHV0QnlTdGF0dXMsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBzdGF0dXMpKSwKICAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUpKTsKIAogICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZSh1
aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDYwZmJiMTVj
NTkxNmI4OWRiNGM2ZDU1MTUwYzY2NTNjMzdlMThmMWUuLmU2NDgxNjdjMTE4NmJjOGM5M2YzMmU4
YzU0YmU3NTE4MzBlZjExMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBNYXRjaFN0cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCmluZGV4IGFhNDk2NGU5YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3Mzg1
MDkuLmUyNWIxZjM4NTQ5MzU0YWUxMzJhZGRiY2I2OGFjYjlkYTgwYjUyOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMTIzNiw2ICsxMjM2LDEw
IEBAIGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgZml4RWRnZTxTeW1ib2xVc2U+KGNoaWxkMik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJlZ2lzdGVyIHBy
ZXNzdXJlIG9uIDMyLWJpdCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCkBAIC0yODY1LDcgKzI4Njks
NyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBDUFVJ
bnRyaW5zaWM6CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAppbmRleCBhODQwNjhlNzc0NmM5ZGM0Mzk0MWU1MWM4ZTMxNWRhNzM1ZGZlMGYz
Li4wYWE4MGZmMDYxYTk2YjBkNTM1ZDYwOGYwYTk1MDg3NjM4Zjg2ZGQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg1LDggKzM4NSw4IEBAIHZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2Rl
LCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmdldEJ5U3RhdHVz
KCkpOwogICAgIGlmIChub2RlLT5oYXNJbkJ5U3RhdHVzKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0
dXMoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsK
KyAgICBpZiAobm9kZS0+aGFzUHV0QnlTdGF0dXMoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAqbm9kZS0+cHV0QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0VudW1lcmF0b3JNZXRh
ZGF0YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJlbnVtZXJhdG9yTW9kZXMgPSAiLCBu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKS50b1JhdygpKTsKICAgICBpZiAobm9kZS0+aXNKdW1w
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNjJhMWZlZjNkYzJjZGRl
MTA5MTUyNGQ2NzM0MDg0MGZkM2YyNjBiMS4uMWJlYzhkZWVkOWRiZGJhNTA3ZDlhM2ZiMWIwMzll
MjZlZTFhZGQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMTIwMiw2
ICsxMjAyLDcgQEAgY2xhc3MgR3JhcGggZmluYWwgOiBwdWJsaWMgdmlydHVhbCBTY2FubmFibGUg
ewogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3ltYm9sU3RydWN0dXJlOwogCiAgICAgSGFzaFNl
dDxOb2RlKj4gbV9zbG93R2V0QnlWYWw7CisgICAgSGFzaFNldDxOb2RlKj4gbV9zbG93UHV0QnlW
YWw7CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNp
dENoaWxkcmVuSW1wbChWaXNpdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCmluZGV4IDkxMGNmMTM5OWZjNmM5ZGIxYTdjNTQ0ZmExY2E5OGJkMjNj
YjNjNjkuLjEyZjI5ZjEwNzE1OGFmYjAwYzY1OGE2ZGY0MzlhNzkxODQyZTg4MDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0yNTIsNiArMjUy
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgbGlua0J1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIGxpbmtCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIGxpbmtCdWZmZXIpOworICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2RlbEJ5SWRzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2RlbEJ5VmFscywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5SWRzLCBsaW5rQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAppbmRleCA5NmJmYzVhMzAzOWEzNjBmZDEwYWE0MDk0ZjU3MDYwYTdjZGE5YTkyLi4z
NjE3NDc3ODFmY2Q2ZTc5MTVlN2EyNTk2ODQ2NWQwN2I2OTFiMjllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xOTksNiArMTk5LDExIEBAIGNsYXNz
IEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAgICAgICAgIG1fcHV0QnlJZHMu
YXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPihnZW4sIHNsb3dQ
YXRoKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRQdXRCeVZhbChjb25zdCBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuLCBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGgpCisgICAgeworICAgICAg
ICBtX3B1dEJ5VmFscy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJh
dG9yPihnZW4sIHNsb3dQYXRoKSk7CisgICAgfQorCiAgICAgdm9pZCBhZGREZWxCeUlkKGNvbnN0
IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoKQog
ICAgIHsKICAgICAgICAgbV9kZWxCeUlkcy5hcHBlbmQoSW5saW5lQ2FjaGVXcmFwcGVyPEpJVERl
bEJ5SWRHZW5lcmF0b3I+KGdlbiwgc2xvd1BhdGgpKTsKQEAgLTM2MCw2ICszNjUsNyBAQCBjbGFz
cyBKSVRDb21waWxlciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogICAgIFZlY3RvcjxJbmxpbmVD
YWNoZVdyYXBwZXI8SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yPiwgND4gbV9nZXRCeUlkc1dp
dGhUaGlzOwogICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlWYWxHZW5lcmF0
b3I+LCA0PiBtX2dldEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5SWRzOworICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdy
YXBwZXI8SklUUHV0QnlWYWxHZW5lcmF0b3I+LCA0PiBtX3B1dEJ5VmFsczsKICAgICBWZWN0b3I8
SW5saW5lQ2FjaGVXcmFwcGVyPEpJVERlbEJ5SWRHZW5lcmF0b3I+LCA0PiBtX2RlbEJ5SWRzOwog
ICAgIFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklURGVsQnlWYWxHZW5lcmF0b3I+LCA0PiBt
X2RlbEJ5VmFsczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEluQnlJZEdlbmVy
YXRvcj4sIDQ+IG1faW5CeUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQu
Y3BwCmluZGV4IGVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYuLjJiZDRh
ZTQ1MzUwNGNkNmI3OGQ4ZDkxZTI0OWIyMGZhNzMwYzNjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEV4aXRNb2RlIG1heUV4
aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBj
YXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlu
a1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0
QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
SW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CmluZGV4IGFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTliZDFjOWEuLjdjYWEyMDIw
MTJkY2E1OGJkYjk4Njk1ODY0NDZhMjQ4YTU4ZTMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRCeVZh
cmlhbnQuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRWYXJpYW50LmgiCiAjaW5jbHVkZSAi
U3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKQEAgLTkyLDcgKzky
LDcgQEAgc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZz
ZXREYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFZlY3RvcjxQdXRC
eUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CisgICAgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMj4gdmFy
aWFudHM7CiAgICAgCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9v
bCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKQEAgLTMyMTAsMTUgKzMyMTAsMTUgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8SW5CeVN0YXR1cyo+KCk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaGFzUHV0QnlJZFN0YXR1cygpCisgICAgYm9vbCBoYXNQdXRC
eVN0YXR1cygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeUlkU3Rh
dHVzOworICAgICAgICByZXR1cm4gb3AoKSA9PSBGaWx0ZXJQdXRCeVN0YXR1czsKICAgICB9CiAg
ICAgCi0gICAgUHV0QnlJZFN0YXR1cyogcHV0QnlJZFN0YXR1cygpCisgICAgUHV0QnlTdGF0dXMq
IHB1dEJ5U3RhdHVzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNQdXRCeUlkU3RhdHVzKCkp
OwotICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8UHV0QnlJZFN0YXR1cyo+KCk7CisgICAgICAg
IEFTU0VSVChoYXNQdXRCeVN0YXR1cygpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFB1
dEJ5U3RhdHVzKj4oKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlbGV0ZUJ5U3RhdHVzKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBlNzViY2ZlOGExYWMzNzFh
MDJlNTY1NDk2Yjk4NzhkOTg3ZWU0YWQwLi45YTkwYTRjZmRhYzhmMjM1MTgyODcyMjRlZGJlZTVm
ZDg5ZjY0M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01
NDYsNyArNTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEZpbHRlckNhbGxMaW5rU3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmls
dGVyR2V0QnlTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJJbkJ5
U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oRmlsdGVyUHV0QnlJZFN0YXR1
cywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZpbHRlclB1dEJ5U3RhdHVzLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVyRGVsZXRlQnlTdGF0dXMsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1cywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1cywg
Tm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGIxY2ZlZThhY2VjMzhjYzA1YTQx
NmVhYmViYjllMjIyMzVlMTdlOGIuLjI4OTczNzhiZjk4NThiMWM0Y2ZhNmEzMTEwMjhjYmEwY2Jl
ZGRmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTIxNSwyMSArMjE1LDYgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJh
c2VsaW5lQ28KIAogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIGlm
IChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgY29tcGlsZSBvcF9wdXRfYnlfdmFsIGFzIFB1dEJ5SWQgYW5kIGlubGlu
ZXMgU2V0dGVyQ2FsbCBvbmx5IHdoZW4gd2UgZm91bmQgU3RydWN0dXJlU3R1YkluZm8gZm9yIHRo
aXMgb3BfcHV0X2J5X3ZhbC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgc3RpbGwgaXQgaXMgcG9z
c2libGUgdGhhdCB3ZSBjYW5ub3QgZmluZCBTdHJ1Y3R1cmVTdHViSW5mbyBoZXJlLiBMZXQncyBj
b25zaWRlciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvLgotICAgICAgICAgICAgICAgIC8vIDEuIEJh
c2VsaW5lIENvZGVCbG9jayAoQSkgaXMgY29tcGlsZWQuCi0gICAgICAgICAgICAgICAgLy8gMi4g
KEEpIGdldHMgREZHIChCKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBTaW5jZSAoQSkgY29sbGVj
dHMgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBwdXRfYnlfdmFsLCAoQikgY2FuIGdldCBTdHJ1Y3R1
cmVTdHViSW5mbyBmcm9tIChBKSBhbmQgY29wbWlsZSBpdCBhcyBpbmxpbmVkIFNldHRlciBjYWxs
LgotICAgICAgICAgICAgICAgIC8vIDQuIChBKSdzIEpJVERhdGEgaXMgZGVzdHJveWVkIHNpbmNl
IGl0IGlzIG5vdCBleGVjdXRlZC4gVGhlbiwgKEEpIGJlY29tZXMgTExJbnQuCi0gICAgICAgICAg
ICAgICAgLy8gNS4gVGhlIENvZGVCbG9jayBpbmxpbmluZyAoQSkgZ2V0cyBPU1IgZXhpdC4gU28g
KEEpIGlzIGV4ZWN1dGVkIGFuZCAoQSkgZXZlbnR1YWxseSBnZXRzIEJhc2VsaW5lIENvZGVCbG9j
ayBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAvLyA2LiAoQikgZ2V0cyBPU1IgZXhpdC4gKEIpIGF0
dGVtcHRzIHRvIHNlYXJjaCBmb3IgU3RydWN0dXJlU3R1YkluZm8gaW4gKEEpIGZvciBQdXRCeUlk
IChvcmlnaW5hbGx5LCBwdXRfYnlfdmFsKS4gQnV0IGl0IGRvZXMgbm90IGV4aXN0IHNpbmNlIChB
KSdzIEpJVERhdGEgaXMgY2xlYXJlZCBvbmNlLgotICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRCeVZhbEluZm8oQ29k
ZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGJ5VmFsSW5mbyk7Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGJ5VmFsSW5mby0+
ZG9uZVRhcmdldC5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJbmZvKENvZGVPcmln
aW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvKTsKICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBzdHViSW5mby0+ZG9uZUxvY2F0aW9uLnJl
dGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCA2
Njc4MzU1NWRmMjE2ZDE4ZjkwYzU5NTQ2ZWM3OTJkNTBkOGZkNThhLi4xZjQxODMxOGE0YzBkZWM2
ZDJlOTlkNDA5ZjcxZGFmYTQ2OTdiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAg
LTEyNTgsNyArMTI1OCw3IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2UgRmls
dGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3Rh
dHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAtMjU1
NCwxNSArMjU1NCwxMyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2Rl
cyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5z
IHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBz
aW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1
c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJp
YW50cy5hcHBlbmQoUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIGN1cnJlbnRTZXQsIGN1
cnJlbnRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBv
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5hZGQoc3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0
LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBt
X2dyYXBoLmFkZE5vZGUoCkBAIC0yNjE1LDcgKzI2MTMsNyBAQCBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVz
OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
UHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAg
ICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
aW5kZXggMTYyMmRkOGIxYjUyMWNjNDFkZmE4NWFiNTMyNjJlY2U4MGZlNzRmMi4uODllNWVmNGQ4
NTFlYzkwZDZkOTg1NWNhNDdjYTViYzc4MjU3MmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
QEAgLTE0NDksNyArMTQ0OSw3IEBAIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgY2FzZSBXZWFrTWFwU2V0OgogICAgICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAg
ICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0
YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKaW5k
ZXggMWUwNDRjZjlkYjFjNjJhN2E5NzAwZTQxNWNiNzMwNGI5YzlhNWEyMC4uZDU0OTY0NDUwYjYz
MjI3NDg5OGQ2OGM4YTliZTlmN2E3NmY5ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgICAgICAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNlMzI0N2Y4YzY5MjZkMjk3YjZjYTJjZjE0ZTJk
NmI1ZDk5M2ViNmIuLjBiZWZlZGFjNDljZjBiNWRlZWM1NTY4MWNjYTAwYjVhZDZjM2FjZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtMjY5MCwzNSArMjY5MCw4MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzogewogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwgfHwg
bm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCk7Ci0KLSAgICAgICAgICAgIGlmIChjaGlsZDEu
dXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtp
bmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9yQ2VsbFdpdGhTdHJpbmcobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250YWlucyhu
b2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0
cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
Mi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3lt
Ym9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRo
U3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwotICAgICAgICAgICAgICAgICAg
ICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIGNoaWxkMSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xs
IHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIGNoaWxkMik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJvcGVydHku
anNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2
YWx1ZS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdENlbGxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBw
cm9wZXJ0eVJlZ3MsIHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncywgdmFs
dWVSZWdzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAg
ICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxk
MSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJl
IHJpZ2h0LgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQy
KTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUo
KS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0
QnlWYWxDZWxsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwg
cHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgY2hpbGQx
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBjaGlsZDIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlKG5vZGUsIGNoaWxkMyk7CisKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworICAg
ICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Q7Cisg
ICAgICAgICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IG5vZGUtPmVjbWFNb2RlKCk7CisKKyAgICAg
ICAgICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsK
KworICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9
IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5
cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUo
Y2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1Bh
dGg7CisgICAgICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAorICAgICAgICAgICAg
ICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZh
bHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIpOworCisgICAgICAgICAgICBtX2ppdC5h
ZGRQdXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKwogICAgICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTQzMjIsNyArNDM2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKaW5kZXggODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0Yy4uZDQ1
NWNhNGU2OGU0NzBiZDRiOTZiZTBhZTFhOTAyOWQ3YmVhY2VhOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0zMTc3LDM0ICsz
MTc3LDk0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+
b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5v
cCgpKTsKLQotICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewot
ICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAg
ICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhub2RlLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRs
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpIHx8IChjaGlsZDEudXNlS2luZCgp
ICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5nKG5vZGUsIGNo
aWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhh
bmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9
PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2wobm9kZSwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlIYW5k
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgY2hpbGQxKTsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxkMik7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOworICAgICAgICAgICAg
ICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcg
YXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBh
cmczLmdwcigpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpCisgICAgICAgICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
UHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihu
b2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJn
MUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0
aGlzLCBjaGlsZDEpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBjaGls
ZDIpOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBjaGlsZDMpOwotICAg
ICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmcz
LmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RT
dHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIp
OwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgIAorCisg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIsIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBj
aGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwor
CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87CisgICAgICAgICAgICBHUFJSZWcg
c3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICAgICAgc3R1YkluZm8gPSBH
UFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5m
by5ncHIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGNo
aWxkMik7CisgICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgY2hpbGQzKTsKKworICAgICAgICAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAg
ICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2Vu
ZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVh
bS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlz
LT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3Ao
KSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbm9k
ZS0+ZWNtYU1vZGUoKTsKKworICAgICAgICAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsK
KworICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZDIpLmlzVHlwZShTcGVjU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9
IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5
cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUo
Y2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdK
SVQpKQorICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93
UGF0aDsKKyAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElD
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8o
KSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAg
ICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVH
UFIsIGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbV9qaXQuYWRkUHV0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKICAgICAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01ODcxLDcgKzU5MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZh
dGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggYjkwNjY1ZWNjZTUyYzU3
ZjQ0YjcwZDQ2N2M0YTRlNWE1ZjM3MDJlMC4uOTdiYjZlMDg2OTkzNTIzYzI5ZTFlMTEwYTIwNDM4
MDI5YTBkMjdkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKQEAgLTIzMyw2ICsyMzMsMTUgQEAg
Y2xhc3MgU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewog
ICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCku
dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgorICAgICAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkJpZ1VpbnQ2NEFycmF5OiB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkgJiYg
KGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBjaGlsZDEudXNlS2luZCgpID09IEtub3du
Q2VsbFVzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zaWRlckJhcnJpZXIoY2hpbGQx
LCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAppbmRleCA1NDEwZDkwODk2ZGM0ZjAxMDU3OTMwZGY4MmY2NjE5MmI4MWY2YzBmLi5j
NWU1Y2YzNmE3NzBkMTU4M2I2OTNkZmQ4ODFkNjQyNGFiMTdiYzhkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMzEyLDggKzMxMiw4IEBAIGNsYXNzIFZh
bGlkYXRlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0g
bm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24p
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2Uu
Y3BwCmluZGV4IGZkYTY0ZDM1ZGEzNDI4ODljNzk4YzA1MWU5NTc2ZThhMWUzM2EzOWIuLmYxYTM4
MDlkN2VmZTMwZjhkNTliYTIxZmFjZDA3MDllNDM4YjkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAt
MTk2LDcgKzE5Niw3IEBAIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoK
KyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgog
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKQEAgLTQyMSw3ICs0MjEsNyBA
QCBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAg
IGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlT
dGF0dXM6CiAgICAgICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAppbmRleCAwM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZiYjU5ZjQ2NTkxZDgzZTRjLi44M2I1MWJh
OWNmNzY1ZGEwNDYzNzNhNzliMWNhMDMzMGM0M2M3YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDcsNyArNDA3LDcgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBNYXRjaFN0
cnVjdHVyZToKICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmls
dGVyUHV0QnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVyRGVsZXRlQnlTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRl
eCA1YTNlOThmNzUzNzAxZDNiMzRmODRiOTgwODNkMjRkYWU4ZWY3MTAwLi4xYjBlZjM5YzU1MTEy
MTgyNTk1OTc2OGYxNDlkZjBkODZmOWZhZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNjQ5LDcgKzE2NDksNyBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyQ2FsbExp
bmtTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgpAQCAt
NTU1Niw1NyArNTU1NiwxNTUgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgY2FzZSBB
cnJheTo6QmlnSW50NjRBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChjaGlsZDEu
dXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9H
Q0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VL
aW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9w
KCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25v
ZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpbmdTdHJpY3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0OwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdOb25TdHJpY3Q7CisgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5jb250YWlucyhtX25vZGUpIHx8IChjaGlsZDEudXNl
S2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAg
ICAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERp
cmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2Rl
KCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0OworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmlj
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0
cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHZtQ2FsbChWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0Nl
bGwoY2hpbGQxKSwgbG93U3RyaW5nKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTdHJpbmcoY2hpbGQyKSwgbG93SlNWYWx1ZShj
aGlsZDMpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJp
Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbENlbGxTeW1ib2xTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsU3ltYm9sTm9uU3RyaWN0OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtp
bmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
Pm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0
cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5
bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1Zh
bHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24s
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3ltYm9sKGNo
aWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZfSklUT3Bl
cmF0aW9uX0dKSkogb3BlcmF0aW9uOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCku
aXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5p
c1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0OworICAgICAgICAgICAgICAgIFZf
SklUT3BlcmF0aW9uX0dKSkogb3BlcmF0aW9uOworICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
Pm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0OworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShj
aGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxv
d0pTVmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fbm9kZTsKKworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGNo
aWxkMSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dKU1ZhbHVlKGNoaWxkMiwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgICAg
ICBzcGVjdWxhdGUoY2hpbGQyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShjaGlsZDMpOworICAg
ICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3RyaW5nID0gZmFsc2U7CisgICAgICAgICAgICBib29s
IHByb3BlcnR5SXNJbnQzMiA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzU3lt
Ym9sID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZShjaGlsZDIpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY0lu
dDMyT25seSkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGFic3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY1N5bWJvbCkp
CisgICAgICAgICAgICAgICAgcHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7Cisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocHJvcGVydHkpOworICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHZhbHVlKTsKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZChtX25vdENlbGxNYXNrLCBWYWx1ZVJlcDo6bGF0ZVJlZyhHUFJJbmZv
Ojpub3RDZWxsTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
bV9udW1iZXJUYWcsIFZhbHVlUmVwOjpsYXRlUmVnKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
KSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hS
ZWdpc3RlcnMgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IDEgOiAwOwor
CisgICAgICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9u
SGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCisg
ICAgICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgICAgIENvZGVP
cmlnaW4gbm9kZVNlbWFudGljT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAg
ICAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX25vZGUtPmVjbWFNb2RlKCk7CisgICAgICAgICAg
ICBib29sIGlzRGlyZWN0ID0gbV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0OworICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAg
ICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUt
PmNvbW1vbi5jb2RlT3JpZ2lucy0+YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlU2VtYW50aWNP
cmlnaW4pOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFy
Z2V0IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVy
czo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPSBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENy
ZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBleGl0IGZvciBjYWxsIElDJ3MgY3JlYXRlZCBieSB0aGUgSUMgZm9yIGdldHRlcnMuIFdl
IGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhl
ciB0aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAor
ICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBl
eGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2Fs
bFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHBhcmFtc1sw
XS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwYXJhbXNbMV0u
Z3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gcGFyYW1zWzJdLmdwcigp
OworICAgICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7
CisKKyAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVy
YXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHBy
b3BlcnR5SXNTdHJpbmc7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSBwcm9wZXJ0eUlzSW50MzI7CisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gcHJvcGVydHlJc1N5bWJvbDsKKwor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAg
ICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkZUTEpJVCkpCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsOworICAgICAgICAgICAgICAgICAg
ICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpG
VExKSVQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1z
LnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1Yklu
Zm9HUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkuY2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3Rh
dGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRp
b24sIEludmFsaWRHUFJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVC
bG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKworICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJlcG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJl
Z2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtODk1MSw3ICs5MDQ5
LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+
IGNhc2VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAg
ICAgIFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQub2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7
CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBo
LnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlKClbal0pOwogICAgICAgICAg
ICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CkBAIC04OTY2LDE2ICs5MDY0LDE2IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0s
IGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZh
cmlhbnRzW2ldOworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlh
bnRzW2ldOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKLSAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOworICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRp
b24sIHZhcmlhbnQua2luZCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFu
c2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW4uc2VtYW50
aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3Ry
dWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTg5ODcs
NyArOTA4NSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhp
bmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50
eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZh
cmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5
ZjRmNTE5YjA2OC4uNzhmZDQ5NDNmOWVjYmM0YzM1YzdjZGNiMzJiNzM3N2NhYjlmMWVkNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTE0MSw3ICsxNDEsNyBAQCBk
ZWYgc2VsZi53cml0ZV9ieXRlY29kZV9zdHJ1Y3RzKGJ5dGVjb2RlX2xpc3QsIGJ5dGVjb2RlX3N0
cnVjdHNfZmlsZW5hbWUpCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2lu
Y2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeVN0YXR1cy5oIgogI2luY2x1
ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGYwNGMxZjQyOGUxMGJmYzcxZmE1Y2UzNWUwMDI4
NjhiYjc4YWRlZjYuLjkxYjNiMzE1NTEwZGE2ODI0YjNjOTYzNDEwZTMzNmQ5NTg5YWJjN2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBAIC02NywxMCArNjcsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkg
XAogICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRGaWVsZFN0cmlj
dE9wdGltaXplKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFB1dFByaXZhdGVGaWVsZEZp
ZWxkU3RyaWN0T3B0aW1pemUpIFwKLSAgICBtYWNybyhQdXRCeUlkQWRkQWNjZXNzQ2FzZSkgXAot
ICAgIG1hY3JvKFB1dEJ5SWRSZXBsYWNlV2l0aEp1bXApIFwKLSAgICBtYWNybyhQdXRCeUlkU2Vs
ZlBhdGNoKSBcCi0gICAgbWFjcm8oSW5CeUlkU2VsZlBhdGNoKSBcCisgICAgbWFjcm8oUHV0QnlB
ZGRBY2Nlc3NDYXNlKSBcCisgICAgbWFjcm8oUHV0QnlSZXBsYWNlV2l0aEp1bXApIFwKKyAgICBt
YWNybyhQdXRCeVNlbGZQYXRjaCkgXAorICAgIG1hY3JvKEluQnlTZWxmUGF0Y2gpIFwKICAgICBt
YWNybyhEZWxCeVJlcGxhY2VXaXRoSnVtcCkgXAogICAgIG1hY3JvKERlbEJ5UmVwbGFjZVdpdGhH
ZW5lcmljKSBcCiAgICAgbWFjcm8oT3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSkgXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGM5YjAxYzBkMDVhNWQ2ZjBjMTFkMGEzNzM4
MWMyZDk4ZWZhNDcxMzIuLjUwZGU4NTViNmFjOTBlZTZkM2QxYzk2MWU0NDg0ODIzOTVhNDYxNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTUxMCw2ICs1MTAsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fZ2V0QnlWYWxJbmRleCA9IDA7CiAg
ICAgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCA9IDA7CiAgICAgbV9wdXRCeUlkSW5kZXggPSAwOwor
ICAgIG1fcHV0QnlWYWxJbmRleCA9IDA7CiAgICAgbV9pbkJ5SWRJbmRleCA9IDA7CiAgICAgbV9p
bkJ5VmFsSW5kZXggPSAwOwogICAgIG1fZGVsQnlJZEluZGV4ID0gMDsKQEAgLTY2Miw2ICs2NjMs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIFJFTEVBU0VfQVNT
RVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhpcy5zaXplKCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKG1fcHV0QnlJZEluZGV4ID09IG1fcHV0QnlJZHMuc2l6ZSgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5VmFsSW5kZXggPT0gbV9wdXRCeVZhbHMuc2l6
ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX2luQnlJZEluZGV4ID09IG1faW5CeUlkcy5zaXpl
KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2VPZkluZGV4ID09IG1faW5zdGFuY2VP
ZnMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChtX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
ID09IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuc2l6ZSgpKTsKQEAgLTkwOSw2ICs5MTEsNyBAQCB2
b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMs
IHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRj
aEJ1ZmZlcik7CisgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVm
ZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCmluZGV4IDZjNGYxMWY2OGU5MDNlYmE2N2M2ZDdlYTkzODdkODFiNDU2YWUw
ZjUuLjZjMzRhYzY3M2EyODJjODhiYTFlYmNmYzRhY2UxODU1ZmEwMjM4MDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaApAQCAtMjI1LDI4ICsyMjUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVD
b21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsPihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZURpcmVjdFB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAg
ICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxv
Y2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5k
IHB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wPihieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNjcsMTYgKzI0NSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGxpbmsoKTsKICAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOwogICAgICAgICAK
LSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0
QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBS
ZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBDYWNoZWFibGVJZGVudGlmaWVyKTsKLQogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FjaGVhYmxlSWRlbnRpZmllcik7CiAKLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKTsKLQogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3
aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCiAgICAgICAgIHsKQEAgLTM4
MiwzOCArMzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmls
ZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2Zp
bGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQg
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7Ci0g
ICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmls
ZSopOwotICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMg
aW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCi0gICAgICAgIC8vIFRoZSB2
YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQg
YW5kCi0gICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1
Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KLSAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBj
YXNlcy4KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVt
aXRJbnQzMlB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIEludDMy
U2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICBKdW1wTGlzdCBlbWl0RG91YmxlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbywgRG91YmxlU2hhcGUpOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVj
b2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKGJ5
dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwgSW5kZXhpbmdUeXBl
IGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoT3As
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiwg
VHlwZWRBcnJheVR5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC0xMDY0LDYgKzEwMDUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiBtX2dldEJ5VmFsczsK
ICAgICAgICAgVmVjdG9yPEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4gbV9nZXRCeUlkc1dp
dGhUaGlzOwogICAgICAgICBWZWN0b3I8SklUUHV0QnlJZEdlbmVyYXRvcj4gbV9wdXRCeUlkczsK
KyAgICAgICAgVmVjdG9yPEpJVFB1dEJ5VmFsR2VuZXJhdG9yPiBtX3B1dEJ5VmFsczsKICAgICAg
ICAgVmVjdG9yPEpJVEluQnlJZEdlbmVyYXRvcj4gbV9pbkJ5SWRzOwogICAgICAgICBWZWN0b3I8
SklUSW5CeVZhbEdlbmVyYXRvcj4gbV9pbkJ5VmFsczsKICAgICAgICAgVmVjdG9yPEpJVERlbEJ5
SWRHZW5lcmF0b3I+IG1fZGVsQnlJZHM7CkBAIC0xMDkxLDYgKzEwMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAg
ICAgICAgdW5zaWduZWQgbV9nZXRCeUlkV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CiAgICAg
ICAgIHVuc2lnbmVkIG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9wdXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9pbkJ5
SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsg
VUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVgg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAKaW5kZXggNjliZjFhMWMzZjhhMWEzOTE2OWM2ZDM5OWMyYjBjNjc2Yzg4Y2Y2
NC4uYTRiYjhmOGJkZDA3NjhiYWM5MzlhODI3ZDU2YjZiOWIyZDRjZDU1MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAK
QEAgLTE0Miw3ICsxNDIsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikK
KyAgICAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdp
biwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5SWQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZh
bHVlLCBzdHViSW5mb0dQUikKICAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICAg
ICAsIG1fcHV0S2luZChwdXRLaW5kKQogewpAQCAtMzgxLDYgKzM4MSw0MyBAQCB2b2lkIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZl
ciYgc2xvd1BhdGgpCiAgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8t
PnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAorSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJVFB1
dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBhcnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHViSW5mb0dQUikKKyAgICA6IEJhc2UoY29kZUJs
b2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1c2Vk
UmVnaXN0ZXJzKQorICAgICwgbV9iYXNlKGJhc2UpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQorewor
ICAgIG1fc3R1YkluZm8tPmhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworCisgICAgbV9z
dHViSW5mby0+YmFzZUdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnJl
Z3MucHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+
dmFsdWVHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgbV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUiA9IHN0dWJJbmZvR1BSOworICAgIG1fc3R1YkluZm8tPm1fYXJyYXlQcm9maWxlR1BSID0g
YXJyYXlQcm9maWxlR1BSOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbV9zdHViSW5mby0+
YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgbV9zdHViSW5mby0+dmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT52LnByb3BlcnR5VGFnR1BSID0gcHJv
cGVydHkudGFnR1BSKCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQoreworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBt
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCit2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShM
aW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCit7CisgICAgQmFzZTo6
ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7CisgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKQorICAgICAgICBtX3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93
UGF0aFN0YXJ0TG9jYXRpb247Cit9CisKIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKQogICAgIDogQmFzZShjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlSW5kZXgsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZWU2ODE0
MTAxYTgxZWJkMTU1YmY0ZGI2OTNmZjQ3YzhhMjc4ZjdmYi4uMzVhNzdmOGU3Mzk2ZTQ2MjdlY2Q2
ZTA4YzUwNDBjZDE0ZmU0NTc0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMTI5LDkgKzEyOSw3IEBAIGNsYXNzIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2VuZXJhdG9y
IHsKIAogY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkKLSAgICAgICAgOiBt
X2VjbWFNb2RlKEVDTUFNb2RlOjpzdHJpY3QoKSkKLSAgICB7IH0KKyAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKICAgICAgICAg
Q29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdz
IGJhc2UsCkBAIC0xNDIsMTAgKzE0MCwzNyBAQCBjbGFzcyBKSVRQdXRCeUlkR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEpJVEJ5SWRHZW5lcmF0b3IgewogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lK
SkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCiBwcml2YXRlOgotICAgIEVDTUFNb2RlIG1fZWNtYU1v
ZGU7CisgICAgRUNNQU1vZGUgbV9lY21hTW9kZSB7IEVDTUFNb2RlOjpzdHJpY3QoKSB9OwogICAg
IFB1dEtpbmQgbV9wdXRLaW5kOwogfTsKIAorY2xhc3MgSklUUHV0QnlWYWxHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgeworICAgIHVzaW5nIEJhc2UgPSBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjsKK3B1YmxpYzoKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
cigpID0gZGVmYXVsdDsKKworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yKAorICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFycmF5
UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zbG93UGF0
aEp1bXAubV9qdW1wLmlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zbG93UGF0aEp1bXAubV9q
dW1wOworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5r
QnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOworCisgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisKK3ByaXZhdGU6CisgICAgSlNWYWx1ZVJl
Z3MgbV9iYXNlOworICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKK307CisKIGNsYXNzIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKICAgICB1c2luZyBCYXNlID0gSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3I7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCmluZGV4IDE3YzI3ZmRjMWNkM2JmNjMyNmE0M2I1ZmVmODFlNjBlNmNjNDdmMDIuLjY3ZTBi
NzgzMDlhNDNmMmJiYjk5YTkxYjM2ODliOTI3YjI2MmRiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCkBAIC0zNTIsNiArMzUyLDE0IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQ
cm9maWxlCiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BS
LCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkgeworICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzIo
c2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0
T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKKyAgICB9Cit9CisKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGUpCiB7CiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5h
ZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKQEAgLTM2MiwyNCArMzcwLDYgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2Zp
bGUqIGFycmF5UHJvZmkKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUt
PmFkZHJlc3NPZk91dE9mQm91bmRzKCkpOwogfQogCi1pbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6
Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKLXsKLSAgICBhdXRvIGFycmF5
UHJvZmlsZVNhdyA9IFtdIChBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5nVHlwZSBjYXBh
YmlsaXR5KSB7Ci0gICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRB
cnJheXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0gICAgfTsKLQotICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMg
YXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwotICAgIGlm
IChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQotICAgICAgICByZXR1
cm4gSklURG91YmxlOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgSW50MzJT
aGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRJbnQzMjsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3
KGFycmF5TW9kZXMsIEFycmF5U3RvcmFnZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5
U3RvcmFnZTsKLSAgICByZXR1cm4gSklUQ29udGlndW91czsKLX0KLQogQUxXQVlTX0lOTElORSBp
bnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7
CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGQyNGQ5ZjVlZGY4NzE1
ODM4ZDc3NWJlY2M3MWY4MTkyNGNiOTNjOTcuLjdmZDA0NjMyODFlMzVkZmU1NWZhZTIwNjEwMGEx
NWRhOTcxOWEyOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcApAQCAtNzE5LDcgKzcxOSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCoKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNv
ZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVy
LCBzbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQ
dXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJl
Y3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikp
CkBAIC03NTEsNyArNzUxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWMKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBz
bG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRC
eShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZp
ZXIsIHNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpOb3REaXJlY3Qp
OwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikp
CkBAIC03ODIsNyArNzgyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2IKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwg
c2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0Qnko
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmll
ciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9
CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIHVpbnRwdHJfdCByYXdDYWNoZWFibGVJZGVudGlmaWVyKSkK
QEAgLTgxMyw3ICs4MTMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBz
bG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeShn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudGlmaWVy
LCBzbG90LCAqc3R1YkluZm8sIFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0KTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgUHV0UHJpdmF0ZUZpZWxkQ2FsbGJhY2s+CkBAIC04ODgsNyAr
ODg4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQ
cml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwKICAgICAgICAgQVNTRVJUX1VOVVNFRChh
Y2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdC
eSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAg
cmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0
cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmUpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1dFNs
b3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmUpOwogICAgIH0pOwogfQogCkBAIC05MjQsMTYgKzkyNCwxNSBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplLCB2b2lkLCAoSgogICAgICAgICBBU1NFUlRfVU5VU0VEKGFjY2Vzc1R5cGUsIGFjY2Vzc1R5
cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKTsKIAog
ICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIG9s
ZFN0cnVjdHVyZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVy
LCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7Cisg
ICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmpl
Y3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtp
bmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCk7CiAgICAgfSk7CiB9CiAK
LXN0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1v
ZGUgZWNtYU1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBzdWJzY3JpcHQudHJ5R2V0QXNVaW50MzJJbmRleCgpKSB7Ci0g
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3Qg
aSA9ICppbmRleDsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTk0Miw3ICs5
NDEsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNl
dE91dE9mQm91bmRzKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAg
ICAgICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUlu
ZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTEsMzIgKzk1MSwzMCBAQCBzdGF0aWMgdm9pZCBw
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdQogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2VWYWx1ZS5w
dXRCeUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwog
ICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CisKICAgICBpZiAoc3Vic2NyaXB0LmlzTnVt
YmVyKCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPmFycmF5
UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKQorICAgICAgICAgICAgICAgIGFy
cmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1
dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAg
IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9u
LgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBpZiAoYnlW
YWxJbmZvLT5zdHViSW5mbyAmJiAoIUNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRl
bnRpZmllckNlbGwoc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpICE9IHBy
b3BlcnR5KSkKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotCiAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZWNt
YU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3Qs
IHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1Zh
bHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIEVDTUFN
b2RlIGVjbWFNb2RlKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1v
ZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtYXliZUluZGV4ID0gc3Vic2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAg
ICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGlu
ZGV4ID0gKm1heWJlSW5kZXg7CiAKICAgICAgICAgc3dpdGNoIChiYXNlT2JqZWN0LT5pbmRleGlu
Z1R5cGUoKSkgewpAQCAtOTg4LDcgKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJv
dW5kcygpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCkBAIC0xMDAyLDE1ICsxMDAxLDExIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKCiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7Ci0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4
LnZhbHVlKCksIHZhbHVlLCAwLCBlY21hTW9kZS5pc1N0cmljdCgpID8gUHV0RGlyZWN0SW5kZXhT
aG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFDYWNoZWFibGVJ
ZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkgfHwgYnlWYWxJ
bmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICBDb21tb25T
bG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0
LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwpAQCAtMTAyMywyMjYgKzEwMTgsMjA2IEBAIGVudW0g
Y2xhc3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKICAgICBHaXZlVXAsCiB9OwogCi1zdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lk
IHB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1
ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwot
Ci0gICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1p
emF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90
T3B0aW1pemVkOwotCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSAmJiBpc0NvcHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdN
b2RlKCkpKQotICAgICAgICByZXR1cm4gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0KLSAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLQotICAgICAgICBB
U1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0g
ICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7Ci0KLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGlmIChoYXNP
cHRpbWl6YWJsZUluZGV4aW5nKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIEF0dGVtcHQg
dG8gb3B0aW1pemUuCi0gICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJy
YXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpZiAoaml0QXJyYXlN
b2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFycmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5
TW9kZSkgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwobG9ja2VyLCB2bSwgY29kZUJsb2Nr
LCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CisgICAg
aWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VP
YmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7Cisg
ICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dlbmVyaWModm0sIGNvZGVC
bG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CisgICAg
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOworICAgICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRLaW5kOjpOb3REaXJlY3QsIGVj
bWFNb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZh
aWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5k
ZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBp
ZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYm
IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRp
bWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAg
ICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1
YnNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
c3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0
LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAg
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQo
KSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9u
UmVzdWx0OjpHaXZlVXApOwotICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNl
ZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBw
cm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxX
aXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kOjpOb3REaXJlY3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAg
ICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9w
dGltaXplZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBTZWVtIGxpa2UgYSBnZW5lcmljIHByb3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAg
ICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmll
cihjb2RlQmxvY2ssIHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3Jl
UHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dElubGlu
ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIGlkZW50
aWZpZXIpKQorICAgICAgICAgICAgICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1Yklu
Zm8sIFB1dEJ5S2luZDo6QnlWYWwsIFB1dEtpbmQ6Ok5vdERpcmVjdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9w
dGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvcHRp
bWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAgICAg
ICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRj
aGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFr
ZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCi0g
ICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBv
cnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFs
IG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCi0g
ICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbEluZm8t
PnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3B0aW1pemF0
aW9uUmVzdWx0OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFs
T2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7
CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1v
ZGUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJy
YXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXph
dGlvblJlc3VsdCByZXN1bHQgPSB0cnlQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6
R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAg
ICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeVZhbEdlbmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVT
UyksIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpKTsKKworICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1zdGF0
aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK0pTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmls
ZSkpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAKLSAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0
IGFsbC4KLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCisgICAgcHV0QnlWYWxPcHRpbWl6ZShnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK3N0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUs
IEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAg
IEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsK
LSAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBh
c09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhz
dHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAg
ICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShz
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3Qo
YXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKKyAgICBp
ZiAoIWlzQ29weU9uV3JpdGUoYmFzZU9iamVjdC0+aW5kZXhpbmdNb2RlKCkpICYmIHN1YnNjcmlw
dC5pc0ludDMyKCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0dl
bmVyaWModm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkgeworICAgICAgICAgICAgaWYgKHByb2Zp
bGUpIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotCi0g
ICAgICAgICAgICAgICAgSklUOjpjb21waWxlRGlyZWN0UHV0QnlWYWwobG9ja2VyLCB2bSwgY29k
ZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Ci0gICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
ciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVw
YXRjaEFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCAqc3R1YkluZm8sIFB1dEtpbmQ6OkRpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICB9
CisgICAgfQogCi0gICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBz
b21lIG9iamVjdCB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3
YWl0IHVudGlsIDEwIHRpbWVzLgotICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9IE9w
dGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkICYmIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlw
ZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvKCkpCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRp
b25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9IGVsc2UgaWYgKENhY2hlYWJsZUlkZW50aWZpZXI6Omlz
Q2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgeworICAgIGlmIChDYWNoZWFibGVJ
ZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkpIHsKICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShnbG9iYWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRl
Y29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2Vlbikg
ewotICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkLnVpZCgpID09IHByb3Bl
cnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhD
YWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIFB1dEtpbmQ6OkRpcmVjdCwgYnlWYWxJbmZvLT5jYWNoZWRJZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0
aW1pemVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFNlZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCi0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KGNvZGVCbG9jaywgc3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSwgZWNtYU1vZGUuaXNTdHJpY3QoKSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsK
KworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9y
aWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOworICAgICAgICAgICAgQ29t
bW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3NUeXBl
ICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciA9IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHN1YnNjcmlwdC5h
c0NlbGwoKSk7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZt
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmVw
YXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwg
aWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQdXRLaW5kOjpE
aXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBv
cHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZSkgewotICAg
ICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBw
YXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlz
dGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5n
Ci0gICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBv
cHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQotICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlf
dmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlm
Ci0gICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgotICAgICAgICBpZiAoKytieVZhbElu
Zm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCi0gICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQg
PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICB9CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHN1YnNj
cmlwdCwgdmFsdWUsIHByb2ZpbGUsIGVjbWFNb2RlKSk7CiAKLSAgICByZXR1cm4gb3B0aW1pemF0
aW9uUmVzdWx0OwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsK
LSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgT3B0aW1pemF0aW9u
UmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIGNvZGVCbG9jaywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXApIHsKLSAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSwgb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKTsKLSAgICB9CiAKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgb2Jq
ZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKSk7CisgICAgZGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgc3R1YkluZm8sIHByb2ZpbGUsIEVDTUFNb2RlOjpz
dHJpY3QoKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZh
bEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9k
ZSBlY21hTW9kZSkpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogCi0gICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworICAg
IGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01B
TW9kZTo6c2xvcHB5KCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0
LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2Zp
bGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJv
bG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAorCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworCisg
ICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBwdXRCeVZhbChnbG9iYWxP
YmplY3QsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNs
b3BweSgpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVj
dCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1
ZSksIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbywgZWNtYU1vZGUpOworCisgICAgc3R1Yklu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFN
b2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFs
dWUuaXNPYmplY3QoKSk7CisKKyAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKwor
ICAgIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZVZhbHVlKSwgc3Vi
c2NyaXB0LCB2YWx1ZSwgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQnJhbmQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRl
eCAyNTg0ZTk5NWU0NjZkZTk0YTliMjAzMjdiMGVjNDg4MWQ1ZjE5OTk4Li5lZmJkODg3MzU0MmZj
M2Y0YmU4M2UwNmJlMDYyNTdiZmMyOWNjNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaApAQCAtMjAzLDEwICsyMDMsMTUgQEAgSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMsIHZvaWQsIChKU0dsb2Jh
bE9iamUKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFt
ZU9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBQcml2YXRlRmllbGRQdXRLaW5k
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFByaXZhdGVOYW1lR2Vu
ZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZh
bEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyosIEVDTUFNb2RlKSk7Ci1K
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYywg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKKworSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwgQXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5l
cmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEFycmF5UHJvZmlsZSopKTsK
IAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEVDTUFNb2RlKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJldHVyblR5cGUs
IChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggM2QxZDg0
ZmM4MjAyYmY4ODliZGYyMGVhMzM4ZGY4YTkxMTA5MDYzYi4uNTY5NDkzMDVhMzU1ZmE5MWU1YTM1
YWJmMTUyOGQ3NzUxM2QwYWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTQzOCwxNzggKzQzOCwzMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2Vy
Q29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7Ci0gICAgaWYgKHByb3Bl
cnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQotICAgICAgICBtb3ZlKEltbTMyKGdldE9wZXJhbmRD
b25zdGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7Ci0gICAgZWxzZQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKIAogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgUGF0Y2hhYmxl
SnVtcCBub3RJbmRleDsKLSAgICBpZiAoIXByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KSB7
Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
Ci0gICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICAg
ICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fbm90SW5kZXhKdW1w
VGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXNJbnQzMi5saW5r
KHRoaXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0
Y2hhYmxlSnVtcElmTm90SW50KHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKG5vdElu
ZGV4KTsKLSAgICAgICAgfQotICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFs
LgotICAgICAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLSAgICB9Ci0gICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOwog
Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQot
ICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgbG9hZDgo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hh
cGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1v
ZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5m
byk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJ
bmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwg
YnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0go
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAorICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpKQorICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0g
dHJ1ZTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShi
YWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwg
YmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAg
IGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLSAgICAgICAg
ICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJn
ZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxp
bmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKLQotICAgIAotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExh
YmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMyk7Ci0gICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQz
MlNoYXBlOgotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMp
KTsKLSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNF
aWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAg
IEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAo
KTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMyk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsK
LSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5hTihmcFJlZ1QwKSk7Ci0gICAgICAg
IHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0
ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7
Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0g
ICAgCi0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7
Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0
b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvKQotewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAg
IAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0g
ICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRy
dXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNv
bHV0ZUFkZHJlc3MoJmJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKLSAgICAgICAgICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJh
bmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0
KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Us
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAg
Ci0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3Mo
cmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIGJy
YW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0KLSAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW5kLmxpbmsodGhp
cyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKKyAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCisgICAg
Ly8gRklYTUU6IFVzZSBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVj
dGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTM5NQorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjYyLDEyICs1
MTcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxw
dHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUg
PSBieXRlY29kZS5tX2VjbWFNb2RlOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNjc1LDQ4ICs1MzMs
NDAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbHNlCiAgICAgICAgIGxvYWQoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKIAotICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
YnlWYWxJbmZvOworICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1tt
X3B1dEJ5VmFsSW5kZXgrK107CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFs
SW5mbywgVHJ1c3RlZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICAvLyBUaGV5IGFyZSBj
b25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjA7CisgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFz
dCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgorICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgLy8gY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BS
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIGJ5VmFsSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KICAgICBDYWxsIGNhbGw7
CisgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZTsKKyAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUpOworICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNzMxLDI0ICs1ODEsMjMgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXQKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGppdC5z
dG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3Vt
ZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIy
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI1OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVn
VDM7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCisg
ICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUiwgdmFsdWVQUiwgYnlWYWxJbmZvR1BSLCBlY21hTW9kZUdQUik7CisgICAg
aml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgc3R1
YkluZm9HUFIsIHByb2ZpbGVHUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
CiAKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQsIEJ5VmFsSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBqaXQuZmFySnVt
cChBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIGppdC5yZXQo
KTsKIApAQCAtODEwLDEzICs2NTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnlWYWxJbmZvR1BSID0gYXJndW1l
bnRHUFI0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHV0S2luZEdQUiA9IGFyZ3VtZW50R1BSNTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5
R1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVl
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKHB1dEtpbmQudmFsdWUoKSksIHB1dEtpbmRHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtODUy
LDE0ICs3MDEsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVu
dEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7
CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAKLSAgICBqaXQuc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGdsb2Jh
bE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIsIGJ5VmFsSW5mb0dQUiwg
cHV0S2luZEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblB1
dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCB2YWx1ZUdQUiwgYnlWYWxJbmZvR1BSLCBwdXRLaW5kR1BSKTsKICAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCkBAIC0zMjkxLDgyICszMTQwLDYgQEAgdm9pZCBKSVQ6OmVtaXRCeVZh
bElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQ2Fj
aGVhYmwKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLQotICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRE
b3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIG5lZWRz
TGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
QXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0
ZUJhcnJpZXIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlN
b2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0ciwgdHlw
ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0lu
dDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gQ3VycmVudGx5
LCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgbmV2ZXIgY29tZXMgaGVyZS4KLSAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMK
LSAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0
ciwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1f
Y29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmIChu
ZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJU
YWcobV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92
ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2ZhckNhbGxzLmxhc3QoKS5mcm9tLCBtX2ZhckNhbGxzLmxhc3QoKS5j
YWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gY3VycmVudEluc3RydWN0
aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJl
Y3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0
aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJu
QWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAg
ICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0g
ICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVz
cy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVt
cFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Ns
b3dPcGVyYXRpb24gPSBpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0
dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgfQotfQotLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5
IGNvbnN1bWVkIGZyb20gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IChKSVRPcGVyYXRpb25zLmNw
cCksCi0vLyBzbyB3ZSBsaXN0IG9mZiB0aGUgdHdvIGV4cGVjdGVkIHNwZWNpYWxpemF0aW9ucyBp
biBhZHZhbmNlLgotdGVtcGxhdGUgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQ
dXRCeVZhbD4oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0KIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKQEAgLTM0MDgsMjIzICszMTgxLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0UHJpdmF0ZU5hbWVXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoKHB1dEtpbmQgPT0gUHV0S2luZDo6RGly
ZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCkgfHwgKHB1dEtpbmQg
PT0gUHV0S2luZDo6Tm90RGlyZWN0ICYmIE9wOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsKSk7
Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotCi0gICAgSnVt
cExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5dGVjb2RlLCBwdXRL
aW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGlu
ZUNhY2hlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93
UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+
ZG9uZVRhcmdldCk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlv
bkhhbmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fbmVhckNhbGxz
KSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGZvciAo
Y29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2ZhckNhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0
ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNh
bGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0
Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRp
bmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJv
cGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS51aWQoKS0+
dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRy
ZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHVi
SW5mbygpOwotCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCA9IENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcCwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJl
dHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotICAgIH0KLX0KLS8vIFRo
aXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIgdHJhbnNsYXRpb24gdW5p
dCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYgdGhlIHR3byBleHBlY3Rl
ZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+KEJ5VmFsSW5mbyosIFJldHVy
bkFkZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotdGVtcGxhdGUgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVj
dD4oQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNJ
bnQodHlwZSkpOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1Qw
OwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGVhcmx5
U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMjsKLSAg
ICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVn
aXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNo
ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbmRpZgot
ICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBsb2FkOChBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotCi0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
aWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJlY3RUeXBlID0gYnJhbmNo
MzIoRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlw
ZSh0eXBlKSkpOwotICAgICAgICAgICAgZmFySnVtcChBYnNvbHV0ZUFkZHJlc3MoJmJ5VmFsSW5m
by0+bV9iYWRUeXBlSnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKLSAgICAgICAg
ICAgIGlzQ29ycmVjdFR5cGUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIH0gZWxzZQotICAg
ICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotCi0gICAgbG9hZDMy
KEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBsYXRl
U2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHks
IGxhdGVTY3JhdGNoMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENh
c2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRz
LmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUs
IGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQg
YmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0
aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4K
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVj
dG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIs
IGZhbHNlKTsKLSAgICAKLSAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFKU0M6OmlzU2lnbmVk
KHR5cGUpKTsKLSAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
ZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICBKdW1wIHRvb0JpZyA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7
Ci0gICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKLSAgICAgICAgSnVt
cCBjbGFtcGVkID0ganVtcCgpOwotICAgICAgICB0b29CaWcubGluayh0aGlzKTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIGNsYW1wZWQu
bGluayh0aGlzKTsKLSAgICAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICB9Ci0gICAgCi0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgc3Rv
cmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNP
bmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBzdG9yZTE2KGVhcmx5
U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwg
QmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFR5cGVkQXJyYXlUeXBlIHR5cGUp
Ci17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwot
ICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAg
UmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3Jh
dGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNl
Ci0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9
IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0g
cmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
bG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAgICAgICAgIGF1dG8gaXNDb3Jy
ZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVB
ZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBl
YXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFs
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkp
KTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRP
ZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgp
KTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKLSAgICBKdW1w
IGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7Ci0gICAgY29udmVy
dEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0g
anVtcCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRjaCkpOwotICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmU2NFRvRG91YmxlKGVhcmx5U2NyYXRjaCwg
ZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFs
dWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIEp1bXAgZG91YmxlQ2FzZSA9IGJy
YW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVh
cmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3Vi
bGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwg
bGF0ZVNjcmF0Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgbW92
ZUludHNUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGxhdGVTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBy
ZWFkeS5saW5rKHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGlu
ZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwot
ICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBs
YXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJp
bWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsK
LSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAg
ICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3Rv
cmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0Zv
dXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShm
cFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IGU4MjY5ZmQxZTE5OWYxNTI0ODRlYjQ0ZGRl
ZjJhYWQxNzc4MjMyZmEuLjhiYTEwZTQzZWE2ZTU1OGE1N2JmZmNlYmE5M2U0ZmRjMDllYjI4Nzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcApAQCAtNDY2LDE1MSArNDY2LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJs
ZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsK
LSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qx
KTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotCi0gICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGluZT8KLSAg
ICBsb2FkOChBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEs
IFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5k
ZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBj
aG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBK
SVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91Ymxl
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5
cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChieXRlY29k
ZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFi
ZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdElu
ZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQotewotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNF
RF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKTsKLSAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwg
QWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAg
Ci0gICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwotICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50
MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1Qx
KSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7Ci0gICAgICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMyk7Ci0gICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1wIG5vdEludCA9IGJy
YW5jaElmTm90SW50MzIocmVnVDEpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdU
MCwgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdElu
dC5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwgZnBS
ZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwot
ICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBvdXRPZkJvdW5k
cy5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHBy
b2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAg
ICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8pCi17Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgZW1p
dExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAg
ZW1pdExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCByZWdUNik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Q2LCBy
ZWdUNyk7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFN
KGJ5VmFsSW5mbyk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYs
IEludmFsaWRHUFJSZWcpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fcHV0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMs
IHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwotICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJ
bmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsgLy8gcGF5
bG9hZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAK
LSAgICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNw
ZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhy
ZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcikp
KTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAganVt
cCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZW5kLmxpbmsodGhpcyk7
Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAg
IC8vIEZJWE1FOiBVc2UgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZl
Y3RpdmVseSB0byByZWR1Y2UgY29kZSBzaXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzOTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNo
b3VsZEZpbHRlckJhc2UpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNjIwLDEyICs0OTUsMTUgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
ICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2Rl
KTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsK
IAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTYzMywyMSArNTExLDIwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKKyAg
ICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4
KytdOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9
IGxhYmVsKCk7Ci0gICAgCisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwog
ICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSBy
ZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBl
biBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZDIoYmFz
ZSwgcmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
T3B0aW1pemUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDIs
IHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJl
Z1Q0KSwgYnlWYWxJbmZvLCBUcnVzdGVkSW1tMzIoZWNtYU1vZGUudmFsdWUoKSkpOwogCi0gICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhU
YXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleCsrOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmlu
ZGV4IDM3YTgwYjI5NTc3MjEwZjM1ZTA2ZDgxYmExMzQ1ZjY5NzgwMDk2NDQuLjBmYWFlNWMyMmE5
YzViNjNiMzUxODExMzhlMDlmZThjN2EzYmFiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcApAQCAtNTY4LDUzICs1NjgsOTQgQEAgdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlMK
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25HZXRCeVZhbEdlbmVyaWMpOwogfQogCi1zdGF0aWMgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNQ
dXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtp
bmQpIC0+IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorc3RhdGljIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtp
bmQgcHV0S2luZCkKIHsKLSAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0Owor
ICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAg
c3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IH0KICAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGF1dG8g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplKQorc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsKLSAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKLSAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOwotICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgQVNTRVJUKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7CkBAIC02ODIsOCArNzIzLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0
dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5k
LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJ
ZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTgxNywxMiArODU4LDEyIEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgIAogICAg
ICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBF
Q01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAg
ICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAKQEAgLTgzNSwxMiAr
ODc2LDEwNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgIHJldHVybiByZXN1bHQuc2hv
dWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12
b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9p
ZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwogICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0
dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBp
ZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisK
KyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApOwor
CisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBB
Y2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmll
dyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkg
eworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMy
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9h
dDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50
NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAg
ICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlw
ZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hh
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0
b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tl
ciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwg
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsK
KworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0lu
Zm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRl
ZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwor
dm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUp
Cit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0g
UHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdl
bmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdl
bmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKIH0KIAogc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtp
bmQsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtOTg2LDcgKzExMjEsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Mo
c3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJ
bmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5SWRTZWxm
UGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0
Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0
eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlk
U2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBw
cm9wZXJ0eU5hbWUpOwpAQCAtMTc1NiwyOCArMTg5MSw1NSBAQCB2b2lkIHJlc2V0R2V0QnkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5k
IGtpbgogICAgIH0KIH0KIAotdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkK
IHsKLSAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplKTsKLSAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNv
ZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIEZ1bmN0aW9uVHlw
ZSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkK
LSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emU7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAg
ICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2Rl
QmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsK
KyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVj
bHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlv
blR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBl
PihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogCiAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlv
bik7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJ
ZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFs
OgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guaAppbmRleCBjMTlmMDJkNGQ0MDE5NTgxZTVhOTRhYmQ2MzczYzBhYzM2MjlkOGU2Li5lY2Uz
NzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guaApAQCAtNDMsNiArNDMsMTEgQEAgZW51bSBjbGFzcyBHZXRCeUtpbmQgewog
ICAgIFByaXZhdGVOYW1lQnlJZCwKIH07CiAKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBC
eUlkLAorICAgIEJ5VmFsLAorfTsKKwogZW51bSBjbGFzcyBEZWxCeUtpbmQgewogICAgIEJ5SWQs
CiAgICAgQnlWYWwKQEAgLTU2LDcgKzYxLDggQEAgZW51bSBjbGFzcyBJbkJ5S2luZCB7CiAKIHZv
aWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlcGF0
Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlL
aW5kKTsKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCByZXBhdGNoQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1
ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJl
cGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVy
ZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwg
U3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxC
eUtpbmQsIEVDTUFNb2RlKTsKIHZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCBy
ZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKQEAgLTY5LDcgKzc1LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mKTsKIHZvaWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwogdm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJ
bmZvJiwgQ2FsbFZhcmlhbnQpOwogdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBQdXRCeUtpbmQpOwogdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKIHZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwogdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKaW5kZXggN2VlYTc1ODcwZTdiMTUyOTY5
MTBkNWUwYTg3MTU1YWM1YzQyZGQzYi4uNzJlN2IwNzkxNGVlZDdmNjc3Nzk5MDFmYmJhMzA2YmM0
NzEyYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5oCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gVGhl
IGZvbGxvd2luZyBpcyBhIHNldCBvZiBhbGlhcyBmb3IgdGhlIG9wY29kZSBuYW1lcy4gVGhpcyBp
cyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlcmUgaXMgY29kZSAoZS5nLiBpbiBHZXRCeVN0YXR1cy5j
cHAgYW5kIFB1dEJ5SWRTdGF0dXMuY3BwKQorLy8gYmVjYXVzZSB0aGVyZSBpcyBjb2RlIChlLmcu
IGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlTdGF0dXMuY3BwKQogLy8gd2hpY2ggcmVmZXJz
IHRvIHRoZSBvcGNvZGVzIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZWZpeGVkIHdpdGggImxsaW50
XyIuCiAvLyBJbiB0aGUgQ0xvb3AgaW1wbGVtZW50YXRpb24sIHRoZSAyIGFyZSBlcXVpdmFsZW50
LiBIZW5jZSwgd2Ugc2V0IHVwIHRoaXMKIC8vIGFsaWFzIGhlcmUuCg==
</data>
<flag name="review"
          id="459459"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="459494"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436464</attachid>
            <date>2021-08-25 21:26:37 -0700</date>
            <delta_ts>2021-08-25 21:26:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229229-20210825212636.patch</filename>
            <type>text/plain</type>
            <size>346575</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YTgyMmE3MWQ5NDM5YTAzOTllZjQwNDhjZDNiODhlNjc4NWIyNzgyLi5iZGMxYjY1NGMzZDUzN2Ey
YjBiNGMwZDNlNWJlOWZiYjQwNTI1N2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyODEgQEAKKzIwMjEtMDgtMjUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBQb2x5bW9ycGhpYyBQdXRCeVZhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIFB1dEJ5
VmFsIElDIHRvIG1vZGVybiBzdHlsZS4gVGhpcyBwb2x5bW9ycGhpYyBQdXRCeVZhbCBjYW4gaGFu
ZGxlIG11bHRpcGxlIGFycmF5IHR5cGVzIGFuZCBtdWx0aXBsZSBpZGVudGlmaWVycy4KKyAgICAg
ICAgQWxzbywgdGhpcyByZW1vdmVzIGFkaG9jIElDIGNvZGUgaW4gQmFzZWxpbmUgc28gdGhhdCBp
dCBwYXZlcyB0aGUgd2F5IHRvIHVubGlua2VkIEJhc2VsaW5lIEpJVCBieSBjbGVhbmluZyB1cCBJ
Qy4KKworICAgICAgICBTZXZlcmFsIGludGVyZXN0aW5nIHBvaW50cyBvZiB0aGUgZGVzaWduLgor
CisgICAgICAgIDEuIFdlIG5lZWQgdG8gcGFzcyBBcnJheVByb2ZpbGUqIHZpYSBHUFJSZWcgdG8g
SUMgc2luY2Ugd2UgbmVlZCB0byBwcm9maWxlIG1heVN0b3JlVG9Ib2xlLCB3aGljaCBpcyBzdGls
bCBpbXBvcnRhbnQgdG8gYXZvaWQgdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgMi4gVHJhbnNpdGlv
biAvIFJlcGxhY2UgSUMgbmVlZCB0byByZWNvcmQgcHJvcGVydHlSZWdzIGlmIGl0IGV4aXN0cyBu
b3QgdG8gY2xvYmJlciB0aGVzZSByZWdpc3RlcnMuIFRoaXMgaXMgaW1wb3J0YW50IGluIERGRyAv
IEZUTCBzaW5jZQorICAgICAgICAgICBJQyBzaG91bGQgbm90IGNsb2JiZXIgdGhlc2UgcmVnaXN0
ZXJzIHVubGVzcyBpdCBpcyBmbHVzaGVkLiBJdCBhbHNvIG1ha2VzIEJhc2VsaW5lIGNvZGUgc21h
bGxlciBzaW5jZSB3ZSBkbyBub3QgcmVsb2FkIHRoZW0gaW4gdGhlIHNsb3cgcGF0aCBjYWxsLgor
ICAgICAgICAzLiBBZGRlZCBhIHBhdGggZm9sZGluZyBTdHJpbmcvU3ltYm9sIHdoZW4gZW1pdHRp
bmcgUHV0QnlWYWwgaW4gREZHIC8gRlRMLiBUaGlzIGVkZ2UtY2FzZSBpcyBmb3VuZCB2aWEgYSBt
aWNyb2JlbmNobWFyay4gTGV0J3MgY29uc2lkZXIgdGhlIGNhc2U6IG9uZQorICAgICAgICAgICBw
dXRfYnlfdmFsIHNpdGUgaGFzIG9uZSBpZGVudGlmaWVyICJmb28iLCBidXQgaXQgaGFzIHNvIG1h
bnkgZGlmZmVyZW50IFN0cnVjdHVyZXMuIFByZXZpb3VzbHksIHdlIGVtaXQgSklUUHV0QnlJZEdl
bmVyYXRvciBhZGhvY2x5LCBhbmQgc3RpbGwgd2UKKyAgICAgICAgICAgY2FjaGUgdGhpcyAiZm9v
IiBpZGVudGlmaWVyIGluIGNhY2hlZElkLiBJbiBERkcgLyBGVEwsIHdoaWxlIHdlIGNhbm5vdCBt
YWtlIGl0IFB1dEJ5T2Zmc2V0LCB3ZSBjYW4gZW1pdCBQdXRCeUlkIHNpbmNlIHdlIGtub3cgdGhh
dCBpZGVudGlmaWVyIGlzCisgICAgICAgICAgIGFsd2F5cyAiZm9vIi4gQnV0IGFmdGVyIHRoaXMg
cGF0Y2gncyBjaGFuZ2UsIHN1Y2ggYSBzaXRlIGJlY29tZXMgc2xvdy1wYXRoLiBBbmQgdGhlbiB0
aGlzIGlkZW50aWZpZXIgaW5mb3JtYXRpb24gaXMgbWlzc2VkLCBhbmQgd2Ugd2VyZSBlbWl0dGlu
ZworICAgICAgICAgICBQdXRCeVZhbCBmb3IgdGhhdC4gRm9yIG5vdywgd2UgYXR0ZW1wdCB0byBm
b2xkIHRvIG9uZSBpZGVudGlmaWVyIGluIERGR0J5dGVDb2RlUGFyc2VyIHNvIHRoYXQgd2UgY2Fu
IHN0aWxsIGF0dGVtcHQgdG8gbWFrZSBpdCBQdXRCeUlkLCB3aGljaAorICAgICAgICAgICBjYW4g
YmUgUHV0QnlPZmZzZXQgaW4gY29uc3RhbnQgZm9sZGluZyBwaGFzZS4gV2Ugd291bGQgbGlrZSB0
byBoYW5kbGUgdGhpcyBvbmUgaWRlbnRpZmllciBzbG93LXBhdGggY2FzZSBpbiBQdXRCeVN0YXR1
cyAvIEdldEJ5U3RhdHVzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgICAgcGF0Y2guCisgICAgICAg
IDQuIE5vdywgREZHIE9TUiBleGl0IGRvZXMgbm90IHF1ZXJ5IHRvIEJ5VmFsSW5mbyBmb3Igc2V0
dGVyIGNhbGxzIHNpbmNlIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIHVzZSBTdHJ1Y3R1cmVTdHViSW5m
byBpbiBCYXNlbGluZS4KKworICAgICAgICBSZXN1bHRzIG9mIE1pY3JvYmVuY2htYXJrcyBsb29r
IGdvb2QuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkCisKKyAgICAgICAg
cHV0LWJ5LXZhbC1kaXJlY3QtbGFyZ2UtaW5kZXggICAgICAgICAgICAgICAgICA5NC42MjY1Ky0w
LjkwNzYgICAgICAgICAgIDkzLjQ1NTArLTAuNzEyMSAgICAgICAgICBtaWdodCBiZSAxLjAxMjV4
IGZhc3RlcgorICAgICAgICBpbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIzLjcxMzErLTAuMzI4MiAgICAgXiAgICAgMjIuNzY3OSstMC4xMTM3ICAgICAgICBeIGRlZmlu
aXRlbHkgMS4wNDE1eCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGln
aHRseS1wb2x5bW9ycGhpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjk4NTIrLTAuMDI4NCAgICAgICAgICAgIDEuOTU4MCstMC4wMjI0
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzOXggZmFzdGVyCisgICAgICAgIGdldC1hbmQtcHV0LWJ5
LXZhbC1kb3VibGUtaW5kZXgtZG9udC1mYWxsLW9mZi1hLWNsaWZmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODUuNDc2MistMC41NzM3ICAg
ICA/ICAgIDE4NS42MzI1Ky0wLjU4MTkgICAgICAgID8KKyAgICAgICAgcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZyAgICAgICAgICAgICAzMC45OTAzKy0wLjEyMDcgICAgICAgICAg
IDMwLjgwOTcrLTAuMTI4NQorICAgICAgICBwdXQtYnktdmFsLW1hY2hpbmUtaW50ICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjg4MDMrLTAuMDM4NCAgICAgICAgICAgIDEuODcwNystMC4wNDQw
CisgICAgICAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zm
c2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQuODQ2MystMC4xMTQ4ICAgICAgICAgICAgNC43ODM5Ky0wLjA1NDcgICAgICAgICAgbWln
aHQgYmUgMS4wMTMweCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBs
YWNlLWFuZC10cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDguODczMCstMS41OTM0ICAgICBeICAgICAgNi4yMjc2Ky0wLjA1
ODUgICAgICAgIF4gZGVmaW5pdGVseSAxLjQyNDh4IGZhc3RlcgorICAgICAgICBmb2xkLXB1dC1i
eS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjgxODMrLTAuMDg0MSAg
ICAgPyAgICAgIDQuODIzMystMC4wODkyICAgICAgICA/CisgICAgICAgIHB1dC1ieS12YWwtZGly
ZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjg0NSstMC4wMDkxICAgICA/ICAg
ICAgMC4yOTAxKy0wLjAwODggICAgICAgID8gbWlnaHQgYmUgMS4wMTk2eCBzbG93ZXIKKyAgICAg
ICAgcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuMzUyNyst
MC4wNjg2ICAgICA/ICAgICAgNi4zOTMzKy0wLjA5NjEgICAgICAgID8KKyAgICAgICAgcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgOS4zNTU2Ky0zLjE0MjEg
ICAgICAgICAgICA3LjE1MDkrLTAuMTAxOSAgICAgICAgICBtaWdodCBiZSAxLjMwODN4IGZhc3Rl
cgorICAgICAgICBwdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIu
MDA1MistMC4wMzA5ICAgICAgICAgICAgMS45NzgxKy0wLjAzOTcgICAgICAgICAgbWlnaHQgYmUg
MS4wMTM3eCBmYXN0ZXIKKyAgICAgICAgcHV0LWJ5LXZhbC1uZWdhdGl2ZS1hcnJheS1pbmRleCAg
ICAgICAgICAgICAgICAxNC45NTcyKy0wLjEyMjEgICAgIF4gICAgIDE0LjU2MzYrLTAuMTA0NCAg
ICAgICAgXiBkZWZpbml0ZWx5IDEuMDI3MHggZmFzdGVyCisgICAgICAgIHB1dC1ieS12YWwtd2l0
aC1zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgMTEuNjM0NSstNC4zMDQ4ICAgICBeICAg
ICAgNy4wOTE5Ky0wLjA5MTggICAgICAgIF4gZGVmaW5pdGVseSAxLjY0MDV4IGZhc3RlcgorICAg
ICAgICBwdXQtYnktdmFsLWxhcmdlLWluZGV4LWJsYW5rLWluZGV4aW5nLXR5cGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xNDI1Ky0w
LjExNjUgICAgICAgICAgICAzLjEyMzYrLTAuMDM3OAorICAgICAgICBpbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIzLjQ5MzIrLTAuMzE4NiAgICAgXiAgICAgMjIuODQ2
OSstMC4wODczICAgICAgICBeIGRlZmluaXRlbHkgMS4wMjgzeCBmYXN0ZXIKKyAgICAgICAgcG9s
eW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbCAgICAgICAgICAgICAzNi42MDQ2Ky0xLjY1
MTkgICAgIF4gICAgIDMwLjg1OTcrLTAuMTQ3NCAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTg2Mngg
ZmFzdGVyCisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIHNob3dlZCByb3VnaGx5IDAuMi0wLjMlIHBy
b2dyZXNzaW9uLgorCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgfCAgICAgICAg
ICAgICAgIHN1YnRlc3QgICAgICAgICAgICAgICAgfCAgICAgbXMgICAgICB8ICAgICBtcyAgICAg
IHwgIGIgLyBhICAgfCBwVmFsdWUgKHNpZ25pZmljYW5jZSB1c2luZyBGYWxzZSBEaXNjb3Zlcnkg
UmF0ZSkgfAorICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHwgRWxtLVRvZG9NVkMg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwxMjEuOTE2NjY3ICAgfDEyMS45NTgzMzMgICB8MS4w
MDAzNDIgIHwgMC44NzY4MDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgfCBWdWVKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgICAgICAgfDI2LjI2
MzMzMyAgICB8MjYuMDA2NjY3ICAgIHwwLjk5MDIyNyAgfCAwLjI2Mzg2OCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IEVtYmVySlMtVG9kb01WQyAg
ICAgICAgICAgICAgICAgICAgICB8MTI3LjA4MDAwMCAgIHwxMjcuODY2NjY3ICAgfDEuMDA2MTkw
ICB8IDAuMDExNDk3IChzaWduaWZpY2FudCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgIHwgQmFja2JvbmVKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgIHw0OC45MjAwMDAg
ICAgfDQ5LjMxODMzMyAgICB8MS4wMDgxNDMgIHwgMC4wMDMzOTUgKHNpZ25pZmljYW50KSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBQcmVhY3QtVG9kb01WQyAgICAgICAg
ICAgICAgICAgICAgICAgfDE5LjgyODMzMyAgICB8MTkuODI4MzMzICAgIHwxLjAwMDAwMCAgfCAx
LjAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICB8IEFuZ3VsYXJKUy1Ub2RvTVZDICAgICAgICAgICAgICAgICAgICB8MTM0LjAxMTY2NyAgIHwx
MzIuMDgwMDAwICAgfDAuOTg1NTg2ICB8IDAuMDAwMDAwIChzaWduaWZpY2FudCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgVmFuaWxsYS1FUzIwMTUtVG9kb01WQyAgICAg
ICAgICAgICAgIHw2My43MjY2NjcgICAgfDYzLjgzODMzMyAgICB8MS4wMDE3NTIgIHwgMC40MDg0
MDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBJ
bmZlcm5vLVRvZG9NVkMgICAgICAgICAgICAgICAgICAgICAgfDY1LjE1MzMzMyAgICB8NjMuNzUz
MzMzICAgIHwwLjk3ODUxMiAgfCAwLjAwMDAwMCAoc2lnbmlmaWNhbnQpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICB8IEZsaWdodC1Ub2RvTVZDICAgICAgICAgICAgICAgICAg
ICAgICB8NzguMTMzMzMzICAgIHw3OC43ODAwMDAgICAgfDEuMDA4Mjc2ICB8IDAuMDk3Nzk0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgQW5ndWxh
cjItVHlwZVNjcmlwdC1Ub2RvTVZDICAgICAgICAgIHw0MC40MTUwMDAgICAgfDQwLjEwMDAwMCAg
ICB8MC45OTIyMDYgIHwgMC4yODc2MzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgfCBWYW5pbGxhSlMtVG9kb01WQyAgICAgICAgICAgICAgICAgICAg
fDUxLjkzMTY2NyAgICB8NTIuNTAwMDAwICAgIHwxLjAxMDk0NCAgfCAwLjAwNDE0OSAoc2lnbmlm
aWNhbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IGpRdWVyeS1Ub2Rv
TVZDICAgICAgICAgICAgICAgICAgICAgICB8MjI2LjA1NjY2NyAgIHwyMjUuMDczMzMzICAgfDAu
OTk1NjUwICB8IDAuMDA3Nzk2IChzaWduaWZpY2FudCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgIHwgRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDICAgICAgICAgICAgICAgIHwzNDEu
MjEwMDAwICAgfDM0MC45NzgzMzMgICB8MC45OTkzMjEgIHwgMC42MjMzODYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCBSZWFjdC1Ub2RvTVZDICAg
ICAgICAgICAgICAgICAgICAgICAgfDg3LjE5ODMzMyAgICB8ODYuODkzMzMzICAgIHwwLjk5NjUw
MiAgfCAwLjA0MjE4OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICB8IFJlYWN0LVJlZHV4LVRvZG9NVkMgICAgICAgICAgICAgICAgICB8MTQ2LjUwNjY2
NyAgIHwxNDUuOTU4MzMzICAgfDAuOTk2MjU3ICB8IDAuMDE4ODAxIChzaWduaWZpY2FudCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgVmFuaWxsYS1FUzIwMTUtQmFiZWwt
V2VicGFjay1Ub2RvTVZDIHw2MS40NTAwMDAgICAgfDYxLjg3MDAwMCAgICB8MS4wMDY4MzUgIHwg
MC4wMDAwNDkgKHNpZ25pZmljYW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBhIG1lYW4gPSAyNTQuODUxMTEKKyAgICAgICAg
YiBtZWFuID0gMjU1LjI1NzM1CisgICAgICAgIHBWYWx1ZSA9IDAuMTg1NjU2MTY1NgorICAgICAg
ICAoQmlnZ2VyIG1lYW5zIGFyZSBiZXR0ZXIuKQorICAgICAgICAxLjAwMiB0aW1lcyBiZXR0ZXIK
KyAgICAgICAgUmVzdWx0cyBBUkUgTk9UIHNpZ25pZmljYW50CisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVja1NraXBwaW5nQ29uc3RhbnRJZGVudGlmaWVyQ2hlY2sgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlDaGVjayBjb25z
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQUiBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OlNoYXJlZEpJVFN0dWJTZXQ6Okhhc2g6OktleTo6
S2V5KToKKyAgICAgICAgKEpTQzo6U2hhcmVkSklUU3R1YlNldDo6SGFzaDo6S2V5OjpvcGVyYXRv
cj09KToKKyAgICAgICAgKEpTQzo6U2hhcmVkSklUU3R1YlNldDo6U2VhcmNoZXI6OlRyYW5zbGF0
b3I6OmVxdWFsKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAg
KEpTQzo6QXJyYXlQcm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29k
ZS9JQ1N0YXR1c01hcC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OmdldFNjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVn
ZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmFw
cGVuZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQpOgor
ICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OlB1dEJ5U3RhdHVzOjpQdXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjptYWtlc0NhbGxzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OnNsb3dWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UHV0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQ
dXRCeVN0YXR1czo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0
dXM6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6OmZpbmFsaXplKToK
KyAgICAgICAgKEpTQzo6UHV0QnlTdGF0dXM6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlT
dGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaC4KKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeVZhcmlhbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcC4KKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpQ
dXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5
VmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6c2V0dGVy
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpvbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBs
YWNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OndyaXRlc1N0cnVj
dHVyZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6OnJlYWxsb2NhdGVzU3Rv
cmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6bWFrZXNDYWxscyBjb25z
dCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeVZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlWYXJpYW50Ojp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKToKKyAgICAgICAgKEpTQzo6UHV0
QnlWYXJpYW50OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcCBj
b25zdCk6CisgICAgICAgIChKU0M6OlB1dEJ5VmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlWYXJpYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaC4KKyAgICAgICAgKEpTQzo6
UHV0QnlWYXJpYW50OjpQdXRCeVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQdXRCeVZhcmlhbnQ6Om92ZXJsYXBz
KToKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMpOgorICAgICAgICAoSlNDOjpSZWNv
cmRlZFN0YXR1c2VzOjp2aXNpdEFnZ3JlZ2F0ZUltcGwpOgorICAgICAgICAoSlNDOjpSZWNvcmRl
ZFN0YXR1c2VzOjphZGRQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9SZWNvcmRlZFN0YXR1c2VzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVySUNT
dGF0dXMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OnRyeUZvbGRBc1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRQdXRC
eVZhbCk6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUHV0QnlTdGF0dXMpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnB1dEJ5U3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNQdXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpw
dXRCeUlkU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25T
aW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgICogZ2VuZXJhdG9y
L0RTTC5yYjoKKyAgICAgICAgKiBqaXQvSUNTdGF0cy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAg
KEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVy
YXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFs
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxH
ZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3Nl
QXJyYXlNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnB1
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpw
dXRCeVZhbE9wdGltaXplKToKKyAgICAgICAgKEpTQzo6ZGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSk6
CisgICAgICAgIChKU0M6OnRyeVB1dEJ5VmFsT3B0aW1pemUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
SklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hBcnJheVB1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeSk6CisgICAgICAg
IChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuaDoKKwogMjAyMS0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bCBzaG91bGQgbm90IGxvYWQgaW5kZXhpbmdUeXBlIHVubmVjZXNzYXJpbHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYWRkNmNiNDMyMjkyN2YyMjE1YTYzMmQzODkzYmRjOWMzODI1
ZmE3YS4uMzIzZDhhNDBlMWY2ZTIzZmNlMjdlZDdjMDhkYjUzMjQ3M2IyNmE1OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2NCw5ICs0NjQsOSBAQAogCQkwRjkzMjc1RjFDMjFF
RjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMx
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlT
dGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGOTMzMkE0MTRDQTdERDkwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkE0
MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0
QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5VmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTUyQUExMURG
Nzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUEwMURGNzg2MDcwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcw
MEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzMDNBMUQ0MTkyQzgwMDU2MDlEOSAvKiBDZWxs
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIENlbGxBdHRyaWJ1dGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4NjYsMTEgKzI4NjYs
MTEgQEAKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeVN0
YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeVN0YXR1
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk2MTRDQTdEQzEwMDg1
RjNDNiAvKiBHZXRCeVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRCeVN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMzI5OTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlTdGF0dXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlTdGF0dXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYg
LyogUHV0QnlTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlT
dGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUIxNENBN0RDMTAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5M0I0QTcx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlW
YXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXRCeVZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NTJB
OUYxREY3ODYwNzAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdFJhY2VLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjk1MkFBMDFERjc4NjA3MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0UmFjZUtleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJl
ZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tl
ZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODY5NSwxMCAr
ODY5NSwxMCBAQAogCQkJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRp
dGlvbi5oICovLAogCQkJCTBGMTVDRDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3Mu
Y3BwICovLAogCQkJCTBGMTVDRDIxMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCAq
LywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8s
Ci0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKLQkJ
CQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovLAotCQkJ
CTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovLAorCQkJCTBG
OTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeVN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMy
OUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5U3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5
MkM0RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5VmFyaWFudC5oICovLAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJMEY0NEE3QUQyMEJGNjg1RjAwMjJCMTcxIC8qIFJl
Y29yZGVkU3RhdHVzZXMuY3BwICovLAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBS
ZWNvcmRlZFN0YXR1c2VzLmggKi8sCkBAIC0xMDUwNiw4ICsxMDUwNiw4IEBACiAJCQkJNzkxNjBE
QkUxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFC
NjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZE
RTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggYTY0NzAyZGI2MDFjYzIxYWJiNGMyNjI5NDU3ZGQxYTc1
OWMzMDIwZC4uNzA3N2VmOWFlMzExNzZmNjM4NWViZTM0Y2NiMzFhNTA1YzE5MWVjNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjY5LDggKzI2OSw4IEBAIGJ5dGVjb2RlL1Byb2dy
YW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2Rl
L1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCi1ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcAotYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCitieXRl
Y29kZS9QdXRCeVN0YXR1cy5jcHAKK2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAogYnl0
ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCmluZGV4IGZhOGI2YjIyZTNhNGUyZGM5NTBjN2JiMjQ2
OTdlNjk4MjgwYzM1YjYuLmEyOTc0N2NhM2RkNGJkODZlZGE5NWY0ZTllMWMwMzYzZWQxYWNiMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAg
LTk5LDYgKzk5LDE5IEBAIFJlZjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlCiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NFN0b3JlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJvdG90eXBlQWNjZXNzQ2hh
aW4pOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMjcyLDYgKzI4NSwxOSBAQCBi
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrU2tpcHBpbmdDb25zdGFudElk
ZW50aWZpZXJDaGVjaygpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJM
b2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIElu
ZGV4ZWRTdHJpbmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAg
IGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAg
Y2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZs
b2F0MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zMjYsNiArMzUyLDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6cmVxdWlyZXNJZGVudGlmaWVyTmFt
ZU1hdGNoKCkgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0
cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRE
b3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTM3OCw2ICs0MTcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpyZXF1aXJlc0ludDMyUHJvcGVydHlD
aGVjaygpIGNvbnN0CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJp
bmdMb2FkOgorICAgIGNhc2UgSW5kZXhlZEludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91
YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZEFycmF5U3RvcmFnZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3Rv
cmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlJbnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDMyU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQy
NSwxMSArNDc3LDI0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6bmVlZHNTY3JhdGNoRlBSKCkgY29uc3QK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKICAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5SW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6CisgICAgY2Fz
ZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6Cisg
ICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQx
NlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0
NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZERvdWJsZVN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTE1LDYgKzU4MCwxOSBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiB2bSwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFN0cmluZ0xvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4
ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2Fz
ZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3Jl
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQz
MlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTU2OSw2ICs2NDcsMTkgQEAgYm9vbCBBY2Nlc3NDYXNlOjpk
b2VzQ2FsbHMoVk0mIHZtLCBWZWN0b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrSWZEb2VzQ2FsbHMp
IGNvbnMKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6
CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVTdG9y
ZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQXJy
YXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToKKyAg
ICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBl
ZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlV
aW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgorICAg
IGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIGRvZXNDYWxscyA9
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlcGxhY2U6CkBAIC02NTAsNiArNzQx
LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhl
cikgY29uc3QKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2Fz
ZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOgogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xv
YWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWREb3VibGVT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgICAgIHJldHVybiBv
dGhlci50eXBlKCkgPT0gdHlwZSgpOwogCiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7
CkBAIC05NjEsNiArMTA2NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5UmVncygpKTsKICAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIpOworICAgICAgICBBU1NF
UlQoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgPT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAg
IGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwpAQCAtMTA2MCw2ICsx
MTY1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9y
LmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIEFTU0VSVChzdHViSW5mby5t
X2FycmF5UHJvZmlsZUdQUiA9PSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc2NyYXRjaEdQUik7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKIApAQCAtMTE0NSw2ICsxMjUxLDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8u
cHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJ
bnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHVi
SW5mb0dQUik7CisgICAgICAgIEFTU0VSVChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiA9PSBJ
bnZhbGlkR1BSUmVnKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
IApAQCAtMTE5OSwxNSArMTMwNiwxNCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAogICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAg
IGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayks
IHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc091dE9mQm91bmRz
OwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNFbXB0eTsKLQogICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMpOwogICAg
ICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVncygpKTsKICAgICAgICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVSZWdzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJv
cGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2Zp
bGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCkBAIC0xMjI3LDE2ICsxMzMzLDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycygp
OwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBpc091dE9mQm91bmRzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlH
UFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3Jk
KHByb3BlcnR5R1BSLCBzY3JhdGNoMkdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
ICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIGlzRW1wdHkg
PSBqaXQuYnJhbmNoSWZFbXB0eShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25v
cmUuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGpp
dC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogI2Vsc2UKICAgICAg
ICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3JhdGNoR1BSKSk7Ci0gICAg
ICAgICAgICBpc0VtcHR5ID0gaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIpOworICAgICAg
ICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkoc2NyYXRjaDNHUFIp
KTsKICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpOwogICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDNHUFIsIHZhbHVlUmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKQEAgLTEyNjIsMjEgKzEzNjgsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZVdpdGhHdWFyZCgKICAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CiAK
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVu
ZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5R1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwogICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvV29yZChwcm9wZXJ0
eUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBJbmRleGVkRG91
YmxlTG9hZCkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLnNjcmF0Y2hG
UFIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVy
czo6VGltZXNFaWdodCksIHN0YXRlLnNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIGlzRW1w
dHkgPSBqaXQuYnJhbmNoSWZOYU4oc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAg
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0Y2hGUFIpKTsK
ICAgICAgICAgICAgICAgICBqaXQuYm94RG91YmxlKHN0YXRlLnNjcmF0Y2hGUFIsIHZhbHVlUmVn
cyk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAg
ICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBz
Y3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgSlNWYWx1ZVJlZ3Moc2NyYXRj
aEdQUikpOwotICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBqaXQuYnJhbmNoSWZFbXB0eShzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
SWZFbXB0eShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQ
UiwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgIGppdC5s
b2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIEpTVmFsdWVSZWdzKHNjcmF0Y2gzR1BSLCBzY3Jh
dGNoR1BSKSk7Ci0gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGppdC5icmFuY2hJZkVtcHR5KHNj
cmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBmYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJh
bmNoSWZFbXB0eShzY3JhdGNoM0dQUikpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKHNjcmF0
Y2hHUFIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGppdC5tb3Zl
KHNjcmF0Y2gzR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCkBAIC0xMjg2LDE2ICsx
MzkyLDI4MiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0
YXRlKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwogCi0gICAgICAgIGlmIChhbGxvY2F0b3Iu
ZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZq
aXQpOwotICAgICAgICAgICAgaXNFbXB0eS5saW5rKCZqaXQpOworICAgICAgICBpZiAoYWxsb2Nh
dG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkgJiYgIWZhaWxBbmRJZ25vcmUuZW1wdHkoKSkgeworICAg
ICAgICAgICAgZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CiAg
ICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChmYWlsQW5k
SWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgSW5kZXhlZEludDMy
U3RvcmU6CisgICAgY2FzZSBJbmRleGVkRG91YmxlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkQ29u
dGlndW91c1N0b3JlOgorICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOiB7CisgICAg
ICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0
YXRlLnUucHJvcGVydHlHUFI7CisKKyAgICAgICAgLy8gaW50MzIgY2hlY2sgZG9uZSBpbiBwb2x5
bW9ycGhpYyBhY2Nlc3MuCisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDb3B5
T25Xcml0ZSkpKTsKKyAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBpc091dE9mQm91bmRzOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1
ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0eVJlZ3MoKSk7
CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAg
ICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUik7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJH
UFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGU7CisKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kSWdub3JlOworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRSZXBhdGNoOworICAgICAgICBhdXRvIHByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzID0gWyZdIHsKKyAgICAgICAgICAgIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdG9yZVJlc3VsdDsKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisKKyAgICAg
ICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlHUFIsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworCisgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5
R1BSLCBzY3JhdGNoMkdQUik7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaXNP
dXRPZkJvdW5kcy5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Olplcm8sIEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKSk7CisjZWxzZQor
ICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6RXF1YWwsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BS
LCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkg
KyBKU1ZhbHVlOjpvZmZzZXRPZlRhZygpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyNlbmRpZgorCisgICAgICAgICAgICBzdG9yZVJlc3Vs
dCA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChpc091dE9m
Qm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGlzRW1wdHkp
OworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGU7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fdHlwZSkgeworICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAg
ICAgICAgICAgICAgICBleHBlY3RlZFNoYXBlID0gSW50MzJTaGFwZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOgorICAgICAgICAg
ICAgICAgIGV4cGVjdGVkU2hhcGUgPSBEb3VibGVTaGFwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4cGVj
dGVkU2hhcGUpKSk7CisKKyAgICAgICAgICAgIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKCk7CisK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGlz
T3V0T2ZCb3VuZHMuYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBzdG9yZVJlc3VsdCA9
IGppdC5sYWJlbCgpOworICAgICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgSW5kZXhlZERvdWJsZVN0b3JlOiB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgICAgICBh
dXRvIG5vdEludCA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7CisgICAgICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHN0
YXRlLnNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZHkgPSBqaXQuanVtcCgp
OworICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyR1BSLCBzdGF0ZS5zY3JhdGNoRlBSKTsKKyAgICAgICAg
ICAgICAgICBmYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTmFOKHN0YXRlLnNjcmF0
Y2hGUFIpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlLCB2YWx1ZVJlZ3MudGFnR1BSKCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJl
Z3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAg
cmVhZHkubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dv
cmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVE
b3VibGUoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBJbmRleGVkSW50MzJT
dG9yZToKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Xb3JkKHByb3BlcnR5R1BS
LCBzY3JhdGNoMkdQUik7CisgICAgICAgICAgICAgICAgZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGpp
dC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncykpOworICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c1N0b3JlOgorICAgICAgICAg
ICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1dvcmQocHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWln
aHQpKTsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZUJhcnJpZXIgbXVzdCBiZSBlbWl0dGVkIGlu
IHRoZSBlbWJlZGRlciBzaWRlLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobV90eXBl
ID09IEluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZSkgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5k
cy5saW5rKCZqaXQpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BS
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fYXJy
YXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTWF5U3RvcmVUb0hvbGUoKSkpOwor
ICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZl
Y3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpC
ZWxvdywgc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCAmaml0KTsKKwor
ICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoMkdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDJHUFIpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsICZq
aXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNPdXRPZkJvdW5kcy5saW5rKCZq
aXQpOworICAgICAgICAgICAgZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAg
ICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiwgQXJyYXlQ
cm9maWxlOjpvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkpKTsKKyAgICAgICAgICAgIGppdC5hZGQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlHUFIsIHNjcmF0Y2gyR1BS
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Cisg
ICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgJmppdCk7CisKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAg
ICAgICAgICAgaWYgKCFmYWlsQW5kSWdub3JlLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBm
YWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAg
ICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIWZhaWxBbmRSZXBhdGNoLmVtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBmYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3Rh
dGUpOworICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRl
LmZhaWxBbmRJZ25vcmUuYXBwZW5kKGZhaWxBbmRJZ25vcmUpOworICAgICAgICAgICAgc3RhdGUu
ZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGZhaWxBbmRSZXBhdGNoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUlu
dDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6IHsKKyAgICAgICAgQVNTRVJU
KCF2aWFQcm94eSgpKTsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0
IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCisK
KyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBlKTsK
KworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOworCisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpKTsK
KworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVw
YXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgIGF1dG8gZG91YmxlQ2FzZSA9IGppdC5icmFuY2hJZk5vdEludDMyKHZhbHVlUmVncyk7Cisg
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUodmFsdWVSZWdzLnBheWxvYWRHUFIo
KSwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICBhdXRvIHJlYWR5ID0gaml0Lmp1bXAo
KTsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UubGluaygmaml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2hJZk5v
dE51bWJlcih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgICAgICBqaXQuYWRkNjQo
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2hHUFIsIHN0YXRl
LnNjcmF0Y2hGUFIpOworI2Vsc2UKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFw
cGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgdmFsdWVSZWdzLnRhZ0dQUigp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAg
ICAgICAgICBqaXQubW92ZUludHNUb0RvdWJsZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MudGFnR1BSKCksIHN0YXRlLnNjcmF0Y2hGUFIpOworI2VuZGlmCisgICAgICAgICAgICBy
ZWFkeS5saW5rKCZqaXQpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgLy8gT3V0T2ZCb3VuZHMgYml0IG9mIEFycmF5UHJv
ZmlsZSB3aWxsIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLgorICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUikpOworCisgICAgICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8udXNlZFJlZ2lzdGVycyk7CisgICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLmJhc2VSZWdzKCkpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5wcm9wZXJ0
eVJlZ3MoKSk7CisgICAgICAgIGlmIChzdHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BS
KTsKKyAgICAgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQ
Uik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoM0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChpc0NsYW1wZWQo
dHlwZSkpCisgICAgICAgICAgICBzY3JhdGNoM0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0
YXRlIHByZXNlcnZlZFN0YXRlID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQ
dXNoaW5nKAorICAgICAgICAgICAgaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJh
U3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9y
KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFn
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BS
LCBmYWxzZSk7CisKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAo
aXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5
cGUpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRj
aDNHUFIpOworICAgICAgICAgICAgICAgIGF1dG8gaW5Cb3VuZHMgPSBqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIHNjcmF0Y2gzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigweGZmKSk7CisgICAgICAgICAgICAgICAgYXV0byB0b29CaWcgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbiwgc2NyYXRjaDNHUFIsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgICAgICAgICBqaXQueG9yMzIoc2NyYXRjaDNH
UFIsIHNjcmF0Y2gzR1BSKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsYW1wZWQgPSBqaXQuanVt
cCgpOworICAgICAgICAgICAgICAgIHRvb0JpZy5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmYpLCBzY3JhdGNoM0dQUik7
CisgICAgICAgICAgICAgICAgY2xhbXBlZC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGlu
Qm91bmRzLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChzY3JhdGNoM0dQ
UiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxs
SGVscGVyczo6VGltZXNPbmUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlOCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc09uZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTE2KHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNo
R1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRj
aDJHUFIsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUuc2NyYXRjaEZQUiAhPSBJbnZhbGlkRlBSUmVnKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgIGNhc2Ug
NDoKKyAgICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc3RhdGUuc2NyYXRj
aEZQUiwgc3RhdGUuc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQo
c3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNj
cmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIDg6IHsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3Vi
bGUoc3RhdGUuc2NyYXRjaEZQUiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIs
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7
CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTMyMiw2ICsxNjk0LDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBp
ZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAg
YWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHVi
SW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0
b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKQEAgLTE4OTQsOCArMjI2OCwxMiBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0
YXRlKQogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZv
LnVzZWRSZWdpc3RlcnMpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlUmVn
cygpKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgaWYgKHN0
dWJJbmZvLnByb3BlcnR5UmVncygpKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1Yklu
Zm8ucHJvcGVydHlSZWdzKCkpOwogICAgICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAh
PSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9z
dHViSW5mb0dQUik7CisgICAgICAgIGlmIChzdHViSW5mby5tX2FycmF5UHJvZmlsZUdQUiAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJh
eVByb2ZpbGVHUFIpOwogICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKIAogICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwpAQCAtMjA1OCw2ICsyNDM2
LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRl
JiBzdGF0ZSkKICAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CiAgICAgICAgIGlmIChz
dHViSW5mby5tX3N0dWJJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICAgICAgQVNTRVJUKHN0dWJJ
bmZvLm1fYXJyYXlQcm9maWxlR1BSID09IEludmFsaWRHUFJSZWcpOwogICAgICAgICBhbGxvY2F0
b3IubG9jayhzY3JhdGNoR1BSKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0
eURlbGV0aW9uKTsKQEAgLTIxODMsNiArMjU2MiwxOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDY0TG9hZDoKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdMb2FkOgogICAgIGNh
c2UgQ2hlY2tQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBj
YXNlIEluZGV4ZWREb3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6
CisgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlw
ZWRBcnJheUludDhTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToK
KyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVp
bnQxNlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6
CiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFy
ZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKICAgICAgICAgLy8gYWxnb3JpdGht
LiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3Rs
eSBmb3IgdGhlc2Ugc2luY2UgdGhleQogICAgICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3Ry
dWN0dXJlIGNoZWNrcy4KQEAgLTIxOTYsMjIgKzI1ODgsMzEgQEAgVHlwZWRBcnJheVR5cGUgQWNj
ZXNzQ2FzZTo6dG9UeXBlZEFycmF5VHlwZShBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiB7CiAgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhMb2Fk
OgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CiAgICAgICAgIHJldHVybiBU
eXBlSW50ODsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOgorICAgIGNhc2Ug
SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Owog
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOgorICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVVaW50
OENsYW1wZWQ7CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDoKKyAgICBjYXNl
IEluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZToKICAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsK
ICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRU
eXBlZEFycmF5VWludDE2U3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlVWludDE2OwogICAgIGNh
c2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJh
eUludDMyU3RvcmU6CiAgICAgICAgIHJldHVybiBUeXBlSW50MzI7CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheVVpbnQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0
b3JlOgogICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMkxvYWQ6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZToK
ICAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0TG9hZDoKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOgogICAg
ICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyODQsNiArMjY4NSwxOSBAQCBib29sIEFjY2Vzc0Nh
c2U6OmNhbkJlU2hhcmVkKGNvbnN0IEFjY2Vzc0Nhc2UmIGxocywgY29uc3QgQWNjZXNzQ2FzZSYg
cmhzKQogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQ2NExvYWQ6CisgICAgY2FzZSBJbmRleGVkSW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRE
b3VibGVTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzU3RvcmU6CisgICAgY2FzZSBJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZToKKyAgICBjYXNlIElu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRB
cnJheUludDE2U3RvcmU6CisgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOgor
ICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJTdG9yZToKKyAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0
b3JlOgorICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CiAgICAgY2FzZSBJ
bmRleGVkU3RyaW5nTG9hZDoKICAgICBjYXNlIEluc3RhbmNlT2ZHZW5lcmljOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5o
CmluZGV4IDQxOWM5OWM5MGY0MzkwMTgwMWQ0YTk2MjExMDUwODk5YmFkZmQ5YmUuLjU2M2ExNTUy
YWU0MjE2NDQwNDZkMGFhNDFkMjNiNmFkZDVkYjY1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMTI4LDcgKzEyOCwyMCBAQCBjbGFzcyBBY2Nl
c3NDYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFjY2Vzc0Nhc2U+IHsKICAgICAg
ICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJh
eUZsb2F0MzJMb2FkLAogICAgICAgICBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkLAotICAg
ICAgICBJbmRleGVkU3RyaW5nTG9hZAorICAgICAgICBJbmRleGVkU3RyaW5nTG9hZCwKKyAgICAg
ICAgSW5kZXhlZEludDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWREb3VibGVTdG9yZSwKKyAgICAg
ICAgSW5kZXhlZENvbnRpZ3VvdXNTdG9yZSwKKyAgICAgICAgSW5kZXhlZEFycmF5U3RvcmFnZVN0
b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZSwKKyAgICAgICAgSW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xh
bXBlZFN0b3JlLAorICAgICAgICBJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmUsCisgICAgICAg
IEluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFycmF5
SW50MzJTdG9yZSwKKyAgICAgICAgSW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZSwKKyAgICAg
ICAgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUsCisgICAgICAgIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQ2NFN0b3JlLAogICAgIH07CiAKICAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CkBA
IC0zNTMsMTIgKzM2NiwxMyBAQCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgc3Ry
dWN0IEtleSB7CiAgICAgICAgICAgICBLZXkoKSA9IGRlZmF1bHQ7CiAKLSAgICAgICAgICAgIEtl
eShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgZXh0cmFHUFIsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgUG9seW1vcnBoaWNBY2Nl
c3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkKKyAgICAgICAgICAgIEtleShHUFJSZWcgYmFzZUdQ
UiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgZXh0cmFHUFIsIEdQUlJlZyBzdHViSW5mb0dQUiwg
R1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgUG9seW1v
cnBoaWNBY2Nlc3NKSVRTdHViUm91dGluZSogd3JhcHBlZCkKICAgICAgICAgICAgICAgICA6IG1f
d3JhcHBlZCh3cmFwcGVkKQogICAgICAgICAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCiAg
ICAgICAgICAgICAgICAgLCBtX3ZhbHVlR1BSKHZhbHVlR1BSKQogICAgICAgICAgICAgICAgICwg
bV9leHRyYUdQUihleHRyYUdQUikKICAgICAgICAgICAgICAgICAsIG1fc3R1YkluZm9HUFIoc3R1
YkluZm9HUFIpCisgICAgICAgICAgICAgICAgLCBtX2FycmF5UHJvZmlsZUdQUihhcnJheVByb2Zp
bGVHUFIpCiAgICAgICAgICAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykK
ICAgICAgICAgICAgIHsgfQogCkBAIC0zNzUsNiArMzg5LDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1
YlNldCB7CiAgICAgICAgICAgICAgICAgICAgICYmIGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVH
UFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5tX2V4dHJhR1BSID09IGIubV9leHRyYUdQUgog
ICAgICAgICAgICAgICAgICAgICAmJiBhLm1fc3R1YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BS
CisgICAgICAgICAgICAgICAgICAgICYmIGEubV9hcnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5
UHJvZmlsZUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBi
Lm1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgICAgIH0KIApAQCAtMzgzLDYgKzM5OCw3IEBAIGNs
YXNzIFNoYXJlZEpJVFN0dWJTZXQgewogICAgICAgICAgICAgR1BSUmVnIG1fdmFsdWVHUFI7CiAg
ICAgICAgICAgICBHUFJSZWcgbV9leHRyYUdQUjsKICAgICAgICAgICAgIEdQUlJlZyBtX3N0dWJJ
bmZvR1BSOworICAgICAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9maWxlR1BSOwogICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwogICAgICAgICB9OwogCkBAIC00MTYsNiAr
NDMyLDcgQEAgY2xhc3MgU2hhcmVkSklUU3R1YlNldCB7CiAgICAgICAgICAgICAgICAgICAgICYm
IGEubV92YWx1ZUdQUiA9PSBiLm1fdmFsdWVHUFIKICAgICAgICAgICAgICAgICAgICAgJiYgYS5t
X2V4dHJhR1BSID09IGIubV9leHRyYUdQUgogICAgICAgICAgICAgICAgICAgICAmJiBhLm1fc3R1
YkluZm9HUFIgPT0gYi5tX3N0dWJJbmZvR1BSCisgICAgICAgICAgICAgICAgICAgICYmIGEubV9h
cnJheVByb2ZpbGVHUFIgPT0gYi5tX2FycmF5UHJvZmlsZUdQUgogICAgICAgICAgICAgICAgICAg
ICAmJiBhLm1fdXNlZFJlZ2lzdGVycyA9PSBiLm1fdXNlZFJlZ2lzdGVycykgewogICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yZGVyaW5nIG9mIGNhc2VzIGRvZXMgbm90IG1hdHRl
ciBmb3Igc2hhcmluZyBjYXBhYmlsaXRpZXMuCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNh
biBwb3RlbnRpYWxseSBpbmNyZWFzZSBzdWNjZXNzIHJhdGUgYnkgbWFraW5nIHRoaXMgY29tcGFy
aXNvbiAvIGhhc2hpbmcgbm9uIG9yZGVyaW5nIHNlbnNpdGl2ZS4KQEAgLTQ0NSw2ICs0NjIsNyBA
QCBjbGFzcyBTaGFyZWRKSVRTdHViU2V0IHsKICAgICAgICAgR1BSUmVnIG1fdmFsdWVHUFI7CiAg
ICAgICAgIEdQUlJlZyBtX2V4dHJhR1BSOwogICAgICAgICBHUFJSZWcgbV9zdHViSW5mb0dQUjsK
KyAgICAgICAgR1BSUmVnIG1fYXJyYXlQcm9maWxlR1BSOwogICAgICAgICBSZWdpc3RlclNldCBt
X3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIGNvbnN0IEZpeGVkVmVjdG9yPFJlZlB0cjxBY2Nlc3ND
YXNlPj4mIG1fY2FzZXM7CiAgICAgICAgIGNvbnN0IEZpeGVkVmVjdG9yPFN0cnVjdHVyZUlEPiYg
bV93ZWFrU3RydWN0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BcnJheVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAppbmRleCA2ZGM3YjBlNTQ0N2ZlMDYwZGJjYmQyNGQ5OTA5NzU2NTc5ZmM2NTc0
Li45MWRhOGYzZWZmOTJmYzNhODk1NzBkNzVhNGI5MTNiZDI2MzJjYzRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCkBAIC0yMDgsNiArMjA4LDkg
QEAgY2xhc3MgQXJyYXlQcm9maWxlIHsKICAgICBBcnJheU1vZGVzKiBhZGRyZXNzT2ZBcnJheU1v
ZGVzKCkgeyByZXR1cm4gJm1fb2JzZXJ2ZWRBcnJheU1vZGVzOyB9CiAgICAgYm9vbCogYWRkcmVz
c09mTWF5U3RvcmVUb0hvbGUoKSB7IHJldHVybiAmbV9tYXlTdG9yZVRvSG9sZTsgfQogCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heVN0b3JlVG9Ib2xlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEFycmF5UHJvZmlsZSwgbV9tYXlTdG9yZVRvSG9sZSk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihBcnJheVByb2ZpbGUsIG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCk7IH0KKwogICAgIHZv
aWQgc2V0T3V0T2ZCb3VuZHMoKSB7IG1fb3V0T2ZCb3VuZHMgPSB0cnVlOyB9CiAgICAgYm9vbCog
YWRkcmVzc09mT3V0T2ZCb3VuZHMoKSB7IHJldHVybiAmbV9vdXRPZkJvdW5kczsgfQogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuY3BwCmluZGV4IDc2NzFkODdiMWVhNzQ5ZGMzNDU2Zjc3NjVhYzA2YzRhOGJj
ZmIyYjEuLjNmZWU2MGI4NzUyMjg3ZDY2YzAzYzYxMjA4ZTI1YjlmMzI0MDU4MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAKQEAgLTE0MSw2ICsxNDEsNyBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nh
c2U6OmVtaXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgY29ucwog
ICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgaWYgKHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7CisgICAgQVNTRVJUKHN0dWJJbmZvLm1fYXJyYXlQcm9maWxlR1BSID09
IEludmFsaWRHUFJSZWcpOwogICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwogCiAgICAg
R1BSUmVnIHBhcmFtQmFzZUdQUiA9IEludmFsaWRHUFJSZWc7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCmluZGV4IGZhMGE2ZDUyM2I3YWQwZGY4ODIxMTA3
ZmUzYjg0OTE3YzQ4M2Q5NTAuLjdhMDU4YzNkMDI1OTZiZjZlYThmZjlhOGE3MmI0ZGMyYTFkMTg5
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01h
cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c01hcC5oCkBA
IC0zNiw3ICszNiw3IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgR2V0QnlTdGF0dXM7CiBjbGFzcyBJbkJ5U3RhdHVzOwotY2xhc3MgUHV0QnlJZFN0YXR1
czsKK2NsYXNzIFB1dEJ5U3RhdHVzOwogY2xhc3MgRGVsZXRlQnlTdGF0dXM7CiBjbGFzcyBTdHJ1
Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBCeVZhbEluZm87CkBAIC00OCw3ICs0OCw3IEBAIHN0cnVj
dCBJQ1N0YXR1cyB7CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxTdGF0dXMgeyBudWxscHRyIH07
CiAgICAgR2V0QnlTdGF0dXMqIGdldFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBJbkJ5U3RhdHVz
KiBpblN0YXR1cyB7IG51bGxwdHIgfTsKLSAgICBQdXRCeUlkU3RhdHVzKiBwdXRTdGF0dXMgeyBu
dWxscHRyIH07CisgICAgUHV0QnlTdGF0dXMqIHB1dFN0YXR1cyB7IG51bGxwdHIgfTsKICAgICBE
ZWxldGVCeVN0YXR1cyogZGVsZXRlU3RhdHVzIHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAppbmRleCA0ODQxMDEz
OWRjMmY4YzBkNWM4MGEyZmY5MDVjM2FhNmExMzVkZmIyLi5jMWViMmQ2OWQyNzU0ZTA1MWE4MjU5
ZjYzNzdlNjQ3MTRlZWFlZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQWNjZXNzLmNwcApAQCAtMjE2LDggKzIxNiwxMiBAQCBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBHUFJSZWcgZ2V0U2NyYXRjaFJlZ2lzdGVyKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5iYXNlVGFnR1BSKTsKICAgICBhbGxvY2F0
b3IubG9jayhzdHViSW5mby52YWx1ZVRhZ0dQUik7CiAjZW5kaWYKKyAgICBpZiAoc3R1YkluZm8u
cHJvcGVydHlSZWdzKCkpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZvLnByb3BlcnR5
UmVncygpKTsKICAgICBpZiAoc3R1YkluZm8ubV9zdHViSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KQogICAgICAgICBhbGxvY2F0b3IubG9jayhzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKKyAgICBp
ZiAoc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
YWxsb2NhdG9yLmxvY2soc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIpOwogICAgIEdQUlJlZyBz
Y3JhdGNoID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgIGlmIChhbGxvY2F0
b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAppbmRleCA4MTA0YTJmMzFkOTEzMTBjM2QzOGUzM2FkZDFmZmU2NjI3NWQ5MTE0Li40MGQ2
YTFmOWRhNTgyNTIwNTU0YWFjMzRlYzFhNDRlNDI5YWY4NjQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTQ5NCw2
ICs0OTQsOCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvYwogI2VuZGlmCiAgICAgaWYgKHN0dWJJ
bmZvLm1fc3R1YkluZm9HUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CisgICAgaWYgKHN0dWJJbmZvLm1fYXJyYXlQcm9m
aWxlR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGFsbG9jYXRvci5sb2NrKHN0dWJJbmZv
Lm1fYXJyYXlQcm9maWxlR1BSKTsKIAogICAgIHN0YXRlLnNjcmF0Y2hHUFIgPSBhbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKQEAgLTgxMCw2ICs4MTIsNyBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvYwogICAgICAgICAgICAgc3R1YkluZm8udmFsdWVHUFIsCiAgICAgICAgICAgICBz
dHViSW5mby5yZWdzLnRoaXNHUFIsCiAgICAgICAgICAgICBzdHViSW5mby5tX3N0dWJJbmZvR1BS
LAorICAgICAgICAgICAgc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsCiAgICAgICAgICAgICBz
dHViSW5mby51c2VkUmVnaXN0ZXJzLAogICAgICAgICAgICAga2V5cywKICAgICAgICAgICAgIHdl
YWtTdHJ1Y3R1cmVzLApAQCAtODQ2LDcgKzg0OSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
CiAKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICBpZiAoY2FuQmVT
aGFyZWQpCi0gICAgICAgICAgICB2bS5tX3NoYXJlZEpJVFN0dWJzLT5hZGQoU2hhcmVkSklUU3R1
YlNldDo6SGFzaDo6S2V5KHN0dWJJbmZvLmJhc2VHUFIsIHN0dWJJbmZvLnZhbHVlR1BSLCBzdHVi
SW5mby5yZWdzLnRoaXNHUFIsIHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIHN0dWJJbmZvLnVzZWRS
ZWdpc3RlcnMsIHN0dWIuZ2V0KCkpKTsKKyAgICAgICAgICAgIHZtLm1fc2hhcmVkSklUU3R1YnMt
PmFkZChTaGFyZWRKSVRTdHViU2V0OjpIYXNoOjpLZXkoc3R1YkluZm8uYmFzZUdQUiwgc3R1Yklu
Zm8udmFsdWVHUFIsIHN0dWJJbmZvLnJlZ3MudGhpc0dQUiwgc3R1YkluZm8ubV9zdHViSW5mb0dQ
Uiwgc3R1YkluZm8ubV9hcnJheVByb2ZpbGVHUFIsIHN0dWJJbmZvLnVzZWRSZWdpc3RlcnMsIHN0
dWIuZ2V0KCkpKTsKICAgICB9CiAKICAgICByZXR1cm4gZmluaXNoQ29kZUdlbmVyYXRpb24oV1RG
TW92ZShzdHViKSk7CkBAIC0xMDIyLDYgKzEwMjUsNDUgQEAgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOgogICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRT
dHJpbmdMb2FkIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4
ZWRJbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRJbnQzMlN0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZToK
KyAgICAgICAgb3V0LnByaW50KCJJbmRleGVkRG91YmxlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJJbmRleGVkQ29udGlndW91c1N0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU6CisgICAgICAgIG91
dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOgorICAgICAg
ICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3Rv
cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlJbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFycmF5SW50
MTZTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQxNlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRUeXBlZEFy
cmF5VWludDE2U3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIklu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU6CisgICAgICAgIG91dC5w
cmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU6CisgICAg
ICAgIG91dC5wcmludCgiSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmUiKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWZhYjlkMzljN2E0ZWE2ZTYxY2Y1NjQ4YWVmYWM5
MGMxZjdjMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgotCi0jaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCi0jaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgotI2luY2x1ZGUgIkdldHRl
clNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCi0jaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChj
b25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKLXsKLSAgICByZXR1cm4gYXBwZW5kSUNTdGF0
dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwotfQotCi12b2lkIFB1dEJ5SWRTdGF0dXM6
OnNocmlua1RvRml0KCkKLXsKLSAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7Ci19Ci0KLVB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBWTSYgdm0gPSBwcm9maWxlZEJsb2NrLT52bSgpOwotICAgIAotICAg
IGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKLQotICAgIC8vIFdlIGFyZSBub3QgeWV0IHVzaW5nIGBjb21w
dXRlRnJvbUxMSW50YCBpbiBhbnkgcGxhY2UgZm9yIGBwdXRfcHJpdmF0ZV9uYW1lYC4KLSAgICAv
LyBXZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGl0IGlmIHRoaXMgaXMgcmVxdWlyZWQgaW4gZnV0dXJl
IGNoYW5nZXMsIHNpbmNlIHdlIGhhdmUKLSAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBv
cGVyYXRpb24gb24gTExJbnQuCi0gICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BQdXRQcml2
YXRlTmFtZT4oKSk7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVk
QmxvY2spOwotCi0gICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0
cnVjdHVyZUlEOwotICAgIGlmICghc3RydWN0dXJlSUQpCi0gICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKE5vSW5mb3JtYXRpb24pOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKLQotICAgIFN0cnVj
dHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKLSAgICBp
ZiAoIW5ld1N0cnVjdHVyZUlEKSB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
bik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQpOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAKLSAg
ICBBU1NFUlQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICAKLSAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKCEoYnl0ZWNv
ZGUubV9mbGFncy5pc0RpcmVjdCgpKSkgewotICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5
KAotICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3Ry
dWN0dXJlLCB1aWQpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICBzdHJ1Y3R1
cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotfQotCi0jaWYgRU5BQkxF
KEpJVCkKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtT
dGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAKLSAgICBVTlVTRURf
UEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwot
ICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChkaWRF
eGl0KQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0
ZWNvZGVJbmRleCkpLnN0dWJJbmZvOwotICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0
ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1
aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
Y29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9Q
QVJBTShtYXApOwotICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKLSAgICBVTlVTRURfUEFSQU0o
Y2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
bik7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLX0KLQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgcmV0
dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKLSAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBz
dHViSW5mbywgdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0
YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkpOwotfQotCi1QdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKLSAgICBjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQotewotICAgIFN0dWJJ
bmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJvZmlsZWRC
bG9jay0+dm0oKSwgc3R1YkluZm8pOwotICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzdW1tYXJ5KTsKLSAgICAKLSAgICBzd2l0Y2gg
KHN0dWJJbmZvLT5jYWNoZVR5cGUoKSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGF0dGVtcHRlZCB0byBjYWNoZSBidXQgZmFpbGVk
IGZvciBzb21lIHJlYXNvbi4KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSk7Ci0gICAgICAgIAotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZTogewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAg
c3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwot
ICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwotICAgICAgICAKLSAgICAg
ICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxl
OwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5h
dChpKTsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAg
ICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQotICAgICAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWNjZXNz
Q2FzZTo6UmVwbGFjZTogewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YWNjZXNzLnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwotICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9u
OiB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAg
ICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7Ci0g
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
YWNjZXNzLmNvbmRpdGlvblNldCgpOwotICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgICAgICAg
ICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogewotICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxl
eEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhH
ZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmNh
bGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxs
RXhpdFNpdGVEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zm
c2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgfSB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyOgotICAgICAgICAg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlcjoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9u
KHN1bW1hcnkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmVzdWx0LnNocmlua1RvRml0KCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpKTsKLSAgICB9Ci19Ci0KLVB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRT
dGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewot
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOwotICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGJ5dGVj
b2RlSW5kZXgpOwotICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJh
c2VsaW5lQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgZm9yIChJQ1N0YXR1c0NvbnRleHQq
IGNvbnRleHQgOiBjb250ZXh0U3RhY2spIHsKLSAgICAgICAgSUNTdGF0dXMgc3RhdHVzID0gY29u
dGV4dC0+Z2V0KGNvZGVPcmlnaW4pOwotICAgICAgICAKLSAgICAgICAgYXV0byBibGVzcyA9IFsm
XSAoY29uc3QgUHV0QnlJZFN0YXR1cyYgcmVzdWx0KSAtPiBQdXRCeUlkU3RhdHVzIHsKLSAgICAg
ICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7Ci0gICAgICAgICAg
ICAgICAgUHV0QnlJZFN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNvbXB1dGVGb3IoCi0gICAgICAg
ICAgICAgICAgICAgIGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCB1
aWQsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwotICAg
ICAgICAgICAgICAgIGJhc2VsaW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lUmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGRpZEV4aXQuaXNTZXQoRXhpdEZyb21JbmxpbmVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LnNsb3dWZXJzaW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9OwotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXR1cy5zdHViSW5mbykgewotICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3Rh
dHVzLnN0dWJJbmZvLCB1aWQsIGNhbGxFeGl0U2l0ZURhdGEpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVz
cyhyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RhdHVzLnB1dFN0
YXR1cykKLSAgICAgICAgICAgIHJldHVybiBibGVzcygqc3RhdHVzLnB1dFN0YXR1cyk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBjb21wdXRlRm9yKGJhc2VsaW5lQmxvY2ssIGJhc2VsaW5lTWFw
LCBieXRlY29kZUluZGV4LCB1aWQsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEpOwotfQotCi1Q
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIGJvb2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2lu
ZCkKLXsKLSAgICBpZiAocGFyc2VJbmRleCgqdWlkKSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICBpZiAoc2V0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKLSAgICAKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fc3RhdGUgPSBT
aW1wbGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgewot
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkg
JiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBoYXZlIGEgdmFs
aWQgb2Zmc2V0IGZvciBzdHJ1Y3R1cmVzIG9uIGBQdXRQcml2YXRlTmFtZUJ5SWRgIGRlZmluZSBt
b2RlCi0gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBhcmUgcmVkZWZpbmluZyBhIHBy
aXZhdGUgZmllbGQuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byB0YWtlIAotICAgICAgICAgICAg
Ly8gc2xvdyBwYXRoIHRvIHRocm93IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIGlmIChwcml2YXRl
RmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFj
ZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFs
aWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3Jl
YXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KLSAgICAgICAg
ICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1
dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCi0gICAgICAgICAgICAgICAgLy8gZ29pbmcg
b24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJv
bSB0aGUgY29uY3VycmVudAotICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4g
aWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3ku
Ci0gICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtl
IHNsb3cgcGF0aC4KLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFy
aWFudCA9Ci0gICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJl
LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2FuIGhh
dmUgYSBjYXNlIHdpdGggUHV0UHJpdmF0ZU5hbWVCeUlkIGluIHNldCBtb2RlIGFuZCBpdAotICAg
ICAgICAvLyBzaG91bGQgbmV2ZXIgY2F1c2UgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBiZWNhdXNl
IGl0IG1lYW5zIHdlIGFyZQotICAgICAgICAvLyB0cnlpbmcgdG8gc3RvcmUgaW4gYSBub3QgaW5z
dGFsbGVkIHByaXZhdGUgZmllbGQuIFdlIG5lZWQgdG8gdGFrZQotICAgICAgICAvLyBzbG93IHBh
dGggdG8gdGhyb3cgZXhjcGV0aW9uIGlmIGl0IGV2ZXIgZ2V0cyBleGVjdXRlZC4KLSAgICAgICAg
aWYgKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0gICAgICAgIC8vIE91ciBoeXBvdGhlc2lzIGlz
IHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlz
IGlzIHJlYWxseQotICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNo
ZWNrcy4KLSAgICAKLSAgICAgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRp
Y3Rpb25hcmllcy4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgICAgICAv
LyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFu
IG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQotICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRv
IGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCi0gICAgICAgIGlmICghc3RydWN0dXJl
LT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBB
U1NFUlQocHJpdmF0ZUZpZWxkUHV0S2luZC5pc05vbmUoKSk7Ci0gICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3NDb25jdXJyZW50
bHkoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQpOwot
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICB9Ci0gICAgCi0g
ICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVy
ZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0KLSAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0
KTsKLSAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOwotICAgIAotICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50
KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOwotICAgICAg
ICBpZiAoIWRpZEFwcGVuZCkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwotICAgIH0KLSAgICAKLSAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgUHV0QnlJZFN0YXR1czo6bWFrZXNDYWxs
cygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RhdGUgPT0gTWFrZXNDYWxscykKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKG1fc3RhdGUgIT0gU2ltcGxlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKG1fdmFyaWFudHNbaV0ubWFrZXNDYWxscygpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpzbG93VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMobWFrZXNDYWxscygpID8gTWFrZXNDYWxscyA6IFRha2VzU2xv
d1BhdGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkU3Rh
dHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGZvciAoUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQotICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwotfQotCi10ZW1wbGF0ZSB2b2lkIFB1dEJ5SWRTdGF0dXM6Om1hcmtJZkNoZWFw
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQgUHV0QnlJZFN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBQdXRCeUlkU3RhdHVzOjpmaW5hbGl6ZShW
TSYgdm0pCi17Ci0gICAgZm9yIChQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMp
IHsKLSAgICAgICAgaWYgKCF2YXJpYW50LmZpbmFsaXplKHZtKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1
czo6bWVyZ2UoY29uc3QgUHV0QnlJZFN0YXR1cyYgb3RoZXIpCi17Ci0gICAgaWYgKG90aGVyLm1f
c3RhdGUgPT0gTm9JbmZvcm1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8g
bWVyZ2VTbG93ID0gWyZdICgpIHsKLSAgICAgICAgKnRoaXMgPSBQdXRCeUlkU3RhdHVzKChtYWtl
c0NhbGxzKCkgfHwgb3RoZXIubWFrZXNDYWxscygpKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQ
YXRoKTsKLSAgICB9OwotICAgIAotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9J
bmZvcm1hdGlvbjoKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgaWYgKG90aGVyLm1fc3RhdGUgIT0gU2lt
cGxlKQotICAgICAgICAgICAgcmV0dXJuIG1lcmdlU2xvdygpOwotICAgICAgICAKLSAgICAgICAg
Zm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIgOiBvdGhlci5tX3ZhcmlhbnRzKSB7Ci0g
ICAgICAgICAgICBpZiAoIWFwcGVuZFZhcmlhbnQob3RoZXIpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtZXJnZVNsb3coKTsKLSAgICAgICAgfQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKLSAgICBjYXNl
IE1ha2VzQ2FsbHM6Ci0gICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKLSAgICB9Ci0gICAgCi0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQdXRCeUlkU3RhdHVz
OjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0g
U2ltcGxlKQotICAgICAgICByZXR1cm47Ci0gICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3Zh
cmlhbnRzLCBzZXQpOwotICAgIGZvciAoUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBtX3Zhcmlh
bnRzKQotICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgp
OwotICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZSA9IE5vSW5m
b3JtYXRpb247Ci19Ci0KLXZvaWQgUHV0QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotewotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgTm9JbmZvcm1hdGlv
bjoKLSAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbikiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgb3V0LnByaW50KCIoIiwgbGlz
dER1bXAobV92YXJpYW50cyksICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
Y2FzZSBUYWtlc1Nsb3dQYXRoOgotICAgICAgICBvdXQucHJpbnQoIihUYWtlc1Nsb3dQYXRoKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBNYWtlc0NhbGxzOgotICAgICAgICBvdXQucHJp
bnQoIihNYWtlc0NhbGxzKSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4ZTI1MmRiNjlhYzU3MTNkYzhlOGY4YjY0NDAwMGNh
ZTYzMGIxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCi0jaW5jbHVkZSAiRXhpdEZsYWcuaCIKLSNpbmNsdWRlICJJQ1N0YXR1c01hcC5oIgotI2lu
Y2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5o
IgotI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgQ29kZUJsb2NrOwotY2xhc3MgVk07Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIFN0
cnVjdHVyZTsKLWNsYXNzIFN0cnVjdHVyZUNoYWluOwotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
Ci0KLXR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVP
cmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOwotCi1jbGFzcyBQdXRCeUlkU3RhdHVz
IGZpbmFsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBlbnVt
IFN0YXRlIHsKLSAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0
aW9uLgotICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBh
IHNpbXBsZSBzdG9yZSBvZiBzb21lIGtpbmQuCi0gICAgICAgIFNpbXBsZSwKLSAgICAgICAgLy8g
SXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KLSAgICAgICAgVGFrZXNTbG93UGF0
aCwKLSAgICAgICAgLy8gSXQncyBrbm93biB0byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4K
LSAgICAgICAgTWFrZXNDYWxscwotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZFN0YXR1cygpCi0g
ICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKLSAgICAgICAgOiBtX3N0YXRlKHN0
YXRlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBt
X3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzKTsKLSAgICB9
Ci0gICAgCi0gICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFy
eSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3VtbWFyeSkgewotICAgICAgICBjYXNlIFN0dWJJ
bmZvU3VtbWFyeTo6Tm9JbmZvcm1hdGlvbjoKLSAgICAgICAgICAgIG1fc3RhdGUgPSBOb0luZm9y
bWF0aW9uOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFy
eTo6U2ltcGxlOgotICAgICAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6TWFrZXNDYWxsczoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOgotICAgICAg
ICAgICAgbV9zdGF0ZSA9IFRha2VzU2xvd1BhdGg7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKLSAg
ICAgICAgICAgIG1fc3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAg
IAotICAgIFB1dEJ5SWRTdGF0dXMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCi0gICAg
ICAgIDogbV9zdGF0ZShTaW1wbGUpCi0gICAgewotICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2
YXJpYW50KTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZv
cihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKLSAgICBz
dGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCwgUHJpdmF0
ZUZpZWxkUHV0S2luZCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZv
cihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNT
dGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVz
IGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
IGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCk7Ci0jZW5kaWYKLSAgICAKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGU7IH0KLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIGlzU2ltcGxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KLSAgICBib29sIHRha2VzU2xvd1Bh
dGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9
PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7Ci0gICAgUHV0QnlJ
ZFN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OwotICAgIAotICAgIHNpemVfdCBudW1WYXJpYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRz
OyB9Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYp
OwotICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lkIG1lcmdlKGNvbnN0IFB1
dEJ5SWRTdGF0dXMmKTsKLSAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
KTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZh
dGU6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9y
U3R1YkluZm8oCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKLSAgICAgICAgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Ci0jZW5kaWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0
YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOwotICAgIAotICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBQdXRC
eUlkVmFyaWFudCYpOwotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAKLSAgICBTdGF0ZSBt
X3N0YXRlOwotICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTRk
NjQ3ODJhOTY0MzkzMDlhZTlhMWZhMDQ4YTM4NzI1NTIxZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCi0KLSNpbmNsdWRlICJDYWxs
TGlua1N0YXR1cy5oIgotI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1QdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQm
IG90aGVyKQotICAgIDogUHV0QnlJZFZhcmlhbnQoKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19
Ci0KLVB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBtX2tpbmQgPSBvdGhlci5tX2tpbmQ7Ci0gICAgbV9v
bGRTdHJ1Y3R1cmUgPSBvdGhlci5tX29sZFN0cnVjdHVyZTsKLSAgICBtX25ld1N0cnVjdHVyZSA9
IG90aGVyLm1fbmV3U3RydWN0dXJlOwotICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25k
aXRpb25TZXQ7Ci0gICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKLSAgICBpZiAob3RoZXIu
bV9jYWxsTGlua1N0YXR1cykKLSAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG1ha2VVbmlxdWU8
Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY2FsbExpbmtTdGF0dXMgPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
UHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7Ci0gICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6dHJhbnNpdGlvbigKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotewotICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKLSAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKLSAgICByZXN1
bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fbmV3U3RydWN0
dXJlID0gbmV3U3RydWN0dXJlOwotICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlv
blNldDsKLSAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKLXsKLSAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fa2luZCA9IFNldHRlcjsKLSAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29u
ZGl0aW9uU2V0OwotICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQubV9j
YWxsTGlua1N0YXR1cyA9IFdURk1vdmUoY2FsbExpbmtTdGF0dXMpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVN0cnVjdHVyZSogUHV0QnlJZFZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07Ci0gICAgICAgIGlmIChz
dHJ1Y3R1cmUgIT0gbV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJl
OwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmZpeFRyYW5zaXRpb25Ub1JlcGxh
Y2VJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKGtpbmQoKSAhPSBUcmFuc2l0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9vbGRTdHJ1Y3R1cmUuc2l6ZSgp
IDw9IDIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fb2xkU3RydWN0dXJlLnNpemUoKTsgaS0t
OykgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fb2xkU3RydWN0dXJlW2ldOwot
ICAgICAgICBpZiAoc3RydWN0dXJlICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBtX25ld1N0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgbV9r
aW5kID0gUmVwbGFjZTsKLSAgICBtX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fY2FsbExpbmtTdGF0dXMpOwotfQotCi1i
b29sIFB1dEJ5SWRWYXJpYW50Ojp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICBjYXNlIFNldHRlcjoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29u
c3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgcmV0dXJuIG9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBjYXNlIFNldHRl
cjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvdGhlcikKLXsKLSAgICBp
ZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBOb3RTZXQ6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0g
ICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Ci0gICAg
ICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2Uob3Ro
ZXIubV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIFB1
dEJ5SWRWYXJpYW50IG5ld1ZhcmlhbnQgPSBvdGhlcjsKLSAgICAgICAgICAgIGlmIChuZXdWYXJp
YW50LmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKCp0aGlzKSkgewotICAgICAg
ICAgICAgICAgICp0aGlzID0gbmV3VmFyaWFudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAg
ICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBSZXBsYWNlOgotICAgICAg
ICAgICAgcmV0dXJuIGF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKG90aGVyKTsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgICAgIGlm
IChtX29sZFN0cnVjdHVyZSAhPSBvdGhlci5tX29sZFN0cnVjdHVyZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25ld1N0cnVj
dHVyZSAhPSBvdGhlci5tX25ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VkQ29uZGl0aW9uU2V0ID0gbV9jb25kaXRp
b25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbmRpdGlvblNldCA9
IG1lcmdlZENvbmRpdGlvblNldDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBjYXNlIFNldHRlcjogewotICAgICAgICBpZiAo
b3RoZXIubV9raW5kICE9IFNldHRlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzIHx8IG90aGVyLm1fY2FsbExpbmtTdGF0
dXMpIHsKLSAgICAgICAgICAgIGlmICghKG1fY2FsbExpbmtTdGF0dXMgJiYgb3RoZXIubV9jYWxs
TGlua1N0YXR1cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENvbmRpdGlvblNl
dDsKLSAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9j
b25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxp
ZCgpIHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb25kaXRp
b25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jYWxs
TGlua1N0YXR1cykKLSAgICAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMtPm1lcmdlKCpvdGhlci5t
X2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgCi0gICAgICAgIG1fb2xkU3RydWN0dXJlLm1lcmdl
KG90aGVyLm1fb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0g
ICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlVHJhbnNpdGlvbldpdGhS
ZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKQotewotICAgIEFTU0VSVChtX2tp
bmQgPT0gVHJhbnNpdGlvbik7Ci0gICAgQVNTRVJUKHJlcGxhY2UubV9raW5kID09IFJlcGxhY2Up
OwotICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0KTsKLSAgICBBU1NFUlQo
IXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKLSAgICBBU1NFUlQoIXJlcGxhY2UucmVhbGxv
Y2F0ZXNTdG9yYWdlKCkpOwotICAgIEFTU0VSVChyZXBsYWNlLmNvbmRpdGlvblNldCgpLmlzRW1w
dHkoKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcgb25seSB3b3JrcyB3aGVu
IHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3IGZpZWxkIHdoaWNoCi0g
ICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhlIG90aGVyIHBhdGggd2Fz
IGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAotICAgIC8vIHdvcmsgaWYgd2Ug
bmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBsYWNlIHBhdGggaXMgcG9s
eW1vcnBoaWMuCi0gICAgCi0gICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFnZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHJlcGxhY2UubV9vbGRTdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQdXRCeUlkVmFyaWFu
dDo6bWFya0lmQ2hlYXAoVmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX29sZFN0cnVjdHVyZS5t
YXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICBpZiAobV9uZXdTdHJ1Y3R1cmUpCi0gICAgICAgIG1f
bmV3U3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLX0KLQotdGVtcGxhdGUgdm9pZCBQ
dXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxh
dGUgdm9pZCBQdXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKLQotYm9v
bCBQdXRCeUlkVmFyaWFudDo6ZmluYWxpemUoVk0mIHZtKQotewotICAgIGlmICghbV9vbGRTdHJ1
Y3R1cmUuaXNTdGlsbEFsaXZlKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICht
X25ld1N0cnVjdHVyZSAmJiAhdm0uaGVhcC5pc01hcmtlZChtX25ld1N0cnVjdHVyZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSh2
bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jYWxsTGlua1N0YXR1cyAmJiAh
bV9jYWxsTGlua1N0YXR1cy0+ZmluYWxpemUodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Ci19Ci0K
LXZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBj
YXNlIE5vdFNldDoKLSAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY2FzZSBSZXBsYWNlOgotICAgICAgICBvdXQucHJpbnQoCi0gICAg
ICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIs
IG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgb3V0LnByaW50KAotICAgICAgICAg
ICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAi
IHRvICIsCi0gICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBj
b250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAiPiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgU2V0dGVyOgotICAgICAgICBvdXQucHJpbnQoCi0g
ICAgICAgICAgICAiPFNldHRlcjogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwg
IiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSIpOwotICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwotICAgICAg
ICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKLSAgICAgICAgb3V0
LnByaW50KCI+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE3NWE3M2EyZjhkNGI1ZTVmMGExZGU0MDhhNWZiYmQxY2I3YWIy
NTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZVNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtTdGF0dXM7Ci0K
LWNsYXNzIFB1dEJ5SWRWYXJpYW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBlbnVtIEtpbmQgewotICAgICAgICBOb3RTZXQsCi0gICAgICAgIFJlcGxhY2Us
Ci0gICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFNldHRlcgotICAgIH07Ci0gICAgCi0gICAg
UHV0QnlJZFZhcmlhbnQoKQotICAgICAgICA6IG1fa2luZChOb3RTZXQpCi0gICAgICAgICwgbV9v
ZmZzZXQoaW52YWxpZE9mZnNldCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlh
bnQmKTsKLSAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50
Jik7Ci0KLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRy
YW5zaXRpb24oCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHNldHRlcigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPik7Ci0gICAgCi0gICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAh
PSBOb3RTZXQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgp
OyB9Ci0gICAgCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIp
OwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kKCkgPT0gVHJhbnNpdGlvbiB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0g
U2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVNldCYg
b2xkU3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
biB8fCBraW5kKCkgPT0gUmVwbGFjZSB8fCBraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0
dXJuIG1fb2xkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gb2xkU3RydWN0dXJlKCk7Ci0gICAgfQot
ICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpIGNvbnN0Owot
ICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVj
dHVyZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNl
c3NhcnkoKTsKLQotICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwotICAgIGJvb2wg
cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7
Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCBpbnRyaW5zaWNzIGZvciBTZXR0ZXJzIChpdCB3b3VsZCBiZSBzd2VldCBpZiB3
ZSBkaWQpIGJ1dCB3ZSBuZWVkIHRoaXMgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIEludHJp
bnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBOb0ludHJpbnNpYzsgfQotCi0gICAgLy8g
VGhpcyBpcyBuZWVkZWQgZm9yIHRlbXBsYXRlZCBoZWxwZXJzLgotICAgIGJvb2wgaXNQcm9wZXJ0
eVVuc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJl
dHVybiBtX29mZnNldDsKLSAgICB9Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5r
U3RhdHVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsK
LSAgICAgICAgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0KCk7Ci0gICAgfQotCi0gICAgYm9v
bCBhdHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpOwotICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwot
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OwotCi0gICAgYm9vbCBvdmVybGFwcyhjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RydWN0dXJlU2V0KCkub3ZlcmxhcHMob3RoZXIu
c3RydWN0dXJlU2V0KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIGF0dGVtcHRUb01l
cmdlVHJhbnNpdGlvbldpdGhSZXBsYWNlKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiByZXBsYWNlKTsK
LSAgICAKLSAgICBLaW5kIG1fa2luZDsKLSAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAg
ICBTdHJ1Y3R1cmVTZXQgbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBtX25ld1N0cnVj
dHVyZSB7IG51bGxwdHIgfTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRp
dGlvblNldDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNWIwOWM4YTVlOTEzZDc3
ZWRlYjczZTZmMWQ2MjVmYzJkZjJlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCkBAIC0wLDAgKzEsNTQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgiCisKKyNpbmNsdWRlICJCeXRlY29k
ZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0
U3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUg
IklDU3RhdHVzVXRpbHMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworYm9vbCBQdXRC
eVN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQpCit7Cisg
ICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKK30K
Kwordm9pZCBQdXRCeVN0YXR1czo6c2hyaW5rVG9GaXQoKQoreworICAgIG1fdmFyaWFudHMuc2hy
aW5rVG9GaXQoKTsKK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Cit7CisgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKKyAgICAKKyAgICBhdXRvIGlu
c3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7CisKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisgICAgY2FzZSBvcF9wdXRfcHJpdmF0ZV9uYW1lOgor
ICAgICAgICAvLyBXZSBkbyBubyBoYXZlIGEgY29kZSByZXRyaWV2aW5nIExMSW50IGluZm9ybWF0
aW9uIGZvciBgb3BfcHV0X3ByaXZhdGVfbmFtZWAuCisgICAgICAgIC8vIFdlIGNhbiBhZGQgc3Vw
cG9ydCBmb3IgaXQgaWYgdGhpcyBpcyByZXF1aXJlZCBpbiBmdXR1cmUgY2hhbmdlcywgc2luY2Ug
d2UgaGF2ZQorICAgICAgICAvLyBJQyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcGVyYXRpb24gb24g
TExJbnQuCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICBk
ZWZhdWx0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KHByb2ZpbGVkQmxvY2spOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSAmKHBy
b2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7CisKKyAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CisgICAgaWYgKCFzdHJ1
Y3R1cmVJRCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAg
IAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KHN0cnVjdHVyZUlEKTsKKworICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0
YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKKyAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVp
ZCk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IFB1dEJ5VmFyaWFudDo6cmVwbGFjZShudWxscHRyLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAg
fQorCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOworICAgIAorICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CisgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhOb0luZm9ybWF0aW9uKTsKKyAgICAKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpKSkg
eworICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBw
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisgICAgfQorICAgIAorICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6
OnRyYW5zaXRpb24obnVsbHB0ciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgb2Zmc2V0KTsKK30KKworI2lmIEVOQUJMRShKSVQpCitQdXRCeVN0YXR1czo6UHV0QnlTdGF0
dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6Tm9J
bmZvcm1hdGlvbjoKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFN0dWJJbmZvU3VtbWFyeTo6U2ltcGxlOgorICAgIGNhc2UgU3R1Yklu
Zm9TdW1tYXJ5OjpNYWtlc0NhbGxzOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xv
d1BhdGg6CisgICAgICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZl
ZFRha2VzU2xvd1BhdGggOiBMaWtlbHlUYWtlc1Nsb3dQYXRoOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAg
ICAgICBtX3N0YXRlID0gc3R1YkluZm8udG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRTbG93UGF0aEFu
ZE1ha2VzQ2FsbHMgOiBNYWtlc0NhbGxzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1B1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCit7CisgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgIAorICAgIFVOVVNFRF9Q
QVJBTShwcm9maWxlZEJsb2NrKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7Cisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGRpZEV4aXQpCisgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZv
OworICAgIFB1dEJ5U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAg
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZSAvLyBF
TkFCTEUoSklUKQorICAgIFVOVVNFRF9QQVJBTShtYXApOworICAgIFVOVVNFRF9QQVJBTShkaWRF
eGl0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7CisgICAgcmV0dXJuIFB1
dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9CisKK1B1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgcmV0dXJuIGNv
bXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5m
bywKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVC
bG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKK30KKworUHV0QnlTdGF0dXMgUHV0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKK3sKKyAg
ICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHBy
b2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKKyAgICBpZiAoIWlzSW5saW5lYWJsZShzdW1t
YXJ5KSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKHN1bW1hcnksICpzdHViSW5mbyk7Cisg
ICAgCisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKCkpIHsKKyAgICBjYXNlIENhY2hl
VHlwZTo6VW5zZXQ6CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBhdHRlbXB0ZWQgdG8g
Y2FjaGUgYnV0IGZhaWxlZCBmb3Igc29tZSByZWFzb24uCisgICAgICAgIHJldHVybiBQdXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAKKyAg
ICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6IHsKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKKyAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHVpZCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAg
ICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5
bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIAorICAgICAg
ICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsK
KyAgICAgICAgICAgIGlmIChhY2Nlc3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGFjY2Vz
cy51aWQoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5
VmFyaWFudDo6cmVwbGFjZShhY2Nlc3MuaWRlbnRpZmllcigpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7
CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRp
b246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBhY2Nlc3MubmV3
U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShhY2Nlc3MudWlkKCkpOworICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAg
ICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBh
Y2Nlc3MuY29uZGl0aW9uU2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQ
dXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAg
ICAgICAgICAgIGF1dG8gdmFyaWFudCA9IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihhY2Nlc3Mu
aWRlbnRpZmllcigpLCBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVu
ZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MudWlk
KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdl
dFN0YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6
OlNob3VsZFNraXA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xv
d1BhdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigp
OworICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBh
Y2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYXV0byB2YXJp
YW50ID0gUHV0QnlWYXJpYW50OjpzZXR0ZXIoYWNjZXNzLmlkZW50aWZpZXIoKSwgc3RydWN0dXJl
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNl
dCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
cmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3Rh
dHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpLCAqc3R1YkluZm8pOworICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxp
bmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKK3sKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxF
eGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGlu
ZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2Fj
aGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKKworICAgIGZvciAoSUNT
dGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7CisgICAgICAgIElDU3RhdHVz
IHN0YXR1cyA9IGNvbnRleHQtPmdldChjb2RlT3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIGF1
dG8gYmxlc3MgPSBbJl0gKGNvbnN0IFB1dEJ5U3RhdHVzJiByZXN1bHQpIC0+IFB1dEJ5U3RhdHVz
IHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNJbmxpbmVkKGNvZGVPcmlnaW4pKSB7Cisg
ICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAor
ICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJ
bmRleCwgZGlkRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSk7Cisg
ICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZGlkRXhpdC5pc1NldChFeGl0RnJvbUlubGluZWQpKQorICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQuc2xvd1ZlcnNpb24oKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBpZiAoc3RhdHVzLnN0dWJJbmZvKSB7CisgICAgICAg
ICAgICBQdXRCeVN0YXR1cyByZXN1bHQ7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1f
bG9jayk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAg
ICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3Rh
dHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVz
dWx0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXR1cy5wdXRTdGF0dXMp
CisgICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5wdXRTdGF0dXMpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gY29tcHV0ZUZvcihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgYnl0
ZWNvZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSk7Cit9CisKK1B1dEJ5U3RhdHVz
IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGJv
b2wgaXNEaXJlY3QsIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCkKK3sK
KyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICBpZiAo
cGFyc2VJbmRleCgqdWlkKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2Vz
U2xvd1BhdGgpOworCisgICAgaWYgKHNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQdXRC
eVN0YXR1cygpOworICAgIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBQ
dXRCeVN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50
eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQorICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xvd1BhdGgpOworCisgICAgICAgIGlmICghc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGhhdmUgYSB2YWxpZCBvZmZz
ZXQgZm9yIHN0cnVjdHVyZXMgb24gYFB1dFByaXZhdGVOYW1lQnlJZGAgZGVmaW5lIG1vZGUKKyAg
ICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIGFyZSByZWRlZmluaW5nIGEgcHJpdmF0ZSBm
aWVsZC4gSW4gc3VjaCBjYXNlLCB3ZSBuZWVkIHRvIHRha2UgCisgICAgICAgICAgICAvLyBzbG93
IHBhdGggdG8gdGhyb3cgZXhjZXB0aW9uLgorICAgICAgICAgICAgaWYgKHByaXZhdGVGaWVsZFB1
dEtpbmQuaXNEZWZpbmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlr
ZWx5VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgKFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2VzU2xv
d1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNl
U2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQp
OworICAgICAgICAgICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxp
ZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVh
dGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAg
ICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0
ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkgaXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBv
bi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9t
IHRoZSBjb25jdXJyZW50CisgICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBp
ZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4K
KyAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ug
c2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtl
c1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHV0QnlWYXJpYW50IHZh
cmlhbnQgPSBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoaWRlbnRpZmllciwgc3RydWN0dXJlLCBvZmZz
ZXQpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBoYXZl
IGEgY2FzZSB3aXRoIFB1dFByaXZhdGVOYW1lQnlJZCBpbiBzZXQgbW9kZSBhbmQgaXQKKyAgICAg
ICAgLy8gc2hvdWxkIG5ldmVyIGNhdXNlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gYmVjYXVzZSBp
dCBtZWFucyB3ZSBhcmUKKyAgICAgICAgLy8gdHJ5aW5nIHRvIHN0b3JlIGluIGEgbm90IGluc3Rh
bGxlZCBwcml2YXRlIGZpZWxkLiBXZSBuZWVkIHRvIHRha2UKKyAgICAgICAgLy8gc2xvdyBwYXRo
IHRvIHRocm93IGV4Y3BldGlvbiBpZiBpdCBldmVyIGdldHMgZXhlY3V0ZWQuCisgICAgICAgIGlm
IChwcml2YXRlRmllbGRQdXRLaW5kLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMg
aXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRo
aXMgaXMgcmVhbGx5CisgICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkg
Y2hlY2tzLgorICAgIAorICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlvbnMgb24g
ZGljdGlvbmFyaWVzLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhMaWtlbHlUYWtlc1Nsb3dQYXRoKTsKKworICAg
ICAgICAvLyBJZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlz
bid0IGFuIG9iamVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3
YW50IHRvIGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmICghc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlT
dGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAg
ICAgICAgICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNOb25lKCkpOworICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNz
Q29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgdWlkKTsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJl
YWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgorICAgICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwg
dWlkLCAwLCBvZmZzZXQpOworICAgICAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlTdGF0dXMoTGlrZWx5VGFrZXNTbG93UGF0aCk7CisgICAgICAgIEFTU0VSVChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIAorICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJl
c3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihpZGVudGlmaWVyLCBz
dHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgIGlm
ICghZGlkQXBwZW5kKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKExpa2VseVRha2Vz
U2xvd1BhdGgpOworICAgIH0KKyAgICAKKyAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK2Jvb2wgUHV0QnlTdGF0dXM6Om1ha2VzQ2FsbHMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlv
bjoKKyAgICBjYXNlIExpa2VseVRha2VzU2xvd1BhdGg6CisgICAgY2FzZSBPYnNlcnZlZFRha2Vz
U2xvd1BhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6Cisg
ICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBTaW1wbGU6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJp
YW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLm1ha2Vz
Q2FsbHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIH0KK30KKworUHV0QnlTdGF0dXMgUHV0QnlTdGF0
dXM6OnNsb3dWZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAob2JzZXJ2ZWRTdHJ1Y3R1cmVTdHVi
SW5mb1Nsb3dQYXRoKCkpCisgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhtYWtlc0NhbGxzKCkg
PyBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFrZXNTbG93UGF0aCk7
CisgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKG1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBMaWtl
bHlUYWtlc1Nsb3dQYXRoKTsKK30KKworQ2FjaGVhYmxlSWRlbnRpZmllciBQdXRCeVN0YXR1czo6
c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmdsZUlkZW50aWZpZXJG
b3JJQ1N0YXR1cyhtX3ZhcmlhbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgUHV0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAg
dmFyaWFudC52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJU0lUX0FHR1JF
R0FURShQdXRCeVN0YXR1cyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIFB1
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcChWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoUHV0
QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKK30KKwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFya0lmQ2hl
YXAoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9pZCBQdXRCeVN0YXR1czo6bWFy
a0lmQ2hlYXAoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBQdXRCeVN0YXR1czo6ZmluYWxpemUoVk0m
IHZtKQoreworICAgIGZvciAoUHV0QnlWYXJpYW50JiB2YXJpYW50IDogbV92YXJpYW50cykgewor
ICAgICAgICBpZiAoIXZhcmlhbnQuZmluYWxpemUodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQdXRCeVN0YXR1czo6bWVy
Z2UoY29uc3QgUHV0QnlTdGF0dXMmIG90aGVyKQoreworICAgIGlmIChvdGhlci5tX3N0YXRlID09
IE5vSW5mb3JtYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbWVyZ2VTbG93ID0g
WyZdICgpIHsKKyAgICAgICAgaWYgKG9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgp
IHx8IG90aGVyLm9ic2VydmVkU3RydWN0dXJlU3R1YkluZm9TbG93UGF0aCgpKQorICAgICAgICAg
ICAgKnRoaXMgPSBQdXRCeVN0YXR1cygobWFrZXNDYWxscygpIHx8IG90aGVyLm1ha2VzQ2FsbHMo
KSkgPyBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyA6IE9ic2VydmVkVGFrZXNTbG93UGF0
aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICp0aGlzID0gUHV0QnlTdGF0dXMoKG1ha2Vz
Q2FsbHMoKSB8fCBvdGhlci5tYWtlc0NhbGxzKCkpID8gTWFrZXNDYWxscyA6IExpa2VseVRha2Vz
U2xvd1BhdGgpOworICAgIH07CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
SW5mb3JtYXRpb246CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIGlmIChvdGhlci5tX3N0YXRlICE9IFNp
bXBsZSkKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVNsb3coKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiBvdGhlciA6IG90aGVyLm1fdmFyaWFudHMpIHsKKyAg
ICAgICAgICAgIGlmICghYXBwZW5kVmFyaWFudChvdGhlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1lcmdlU2xvdygpOworICAgICAgICB9CisgICAgICAgIHNocmlua1RvRml0KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBMaWtlbHlUYWtlc1Nsb3dQYXRoOgorICAg
IGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICBj
YXNlIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzOgorICAgICAgICByZXR1cm4gbWVyZ2VT
bG93KCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sK
KyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybjsKKyAgICBmaWx0ZXJJ
Q1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHNldCk7CisgICAgZm9yIChQdXRCeVZhcmlhbnQm
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2YXJpYW50LmZpeFRyYW5zaXRpb25Ub1Jl
cGxhY2VJZk5lY2Vzc2FyeSgpOworICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgUHV0QnlTdGF0dXM6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBj
YXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0LnByaW50KCIo
IiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExpa2VseVRha2VzU2xvd1BhdGg6CisgICAgICAgIG91dC5wcmludCgiTGlrZWx5VGFrZXNTbG93
UGF0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6
CisgICAgICAgIG91dC5wcmludCgiT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIG91dC5wcmludCgiTWFrZXNDYWxs
cyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXND
YWxsczoKKyAgICAgICAgb3V0LnByaW50KCJPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxscyIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYzQ2OGEyODZlYjVmYjcx
ZjkxN2I4MDg0Y2NkY2EwZjRhMjI4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJFeGl0RmxhZy5oIgor
I2luY2x1ZGUgIklDU3RhdHVzTWFwLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5o
IgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFudC5oIgorI2luY2x1ZGUgIlN0dWJJbmZvU3VtbWFyeS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVk07CitjbGFz
cyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNzIFN0cnVjdHVyZUNoYWlu
OworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2lu
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZv
TWFwOworCitjbGFzcyBQdXRCeVN0YXR1cyBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNo
ZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAg
ICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgorICAg
ICAgICBTaW1wbGUsCisgICAgICAgIC8vIEl0IHdpbGwgbGlrZWx5IHRha2UgdGhlIHNsb3cgcGF0
aC4KKyAgICAgICAgTGlrZWx5VGFrZXNTbG93UGF0aCwKKyAgICAgICAgLy8gSXQncyBrbm93biB0
byB0YWtlIHNsb3cgcGF0aC4gV2UgYWxzbyBvYnNlcnZlZCB0aGF0IHRoZSBzbG93IHBhdGggd2Fz
IHRha2VuIG9uIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICBPYnNlcnZlZFRha2VzU2xvd1Bh
dGgsCisgICAgICAgIC8vIEl0IHdpbGwgbGlrZWx5IHRha2UgdGhlIHNsb3cgcGF0aCBhbmQgd2ls
bCBtYWtlIGNhbGxzLgorICAgICAgICBNYWtlc0NhbGxzLAorICAgICAgICAvLyBJdCBrbm93biB0
byB0YWtlIHBhdGhzIHRoYXQgbWFrZSBjYWxscy4gV2UgYWxzbyBvYnNlcnZlZCB0aGF0IHRoZSBz
bG93IHBhdGggd2FzIHRha2VuIG9uIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICBPYnNlcnZl
ZFNsb3dQYXRoQW5kTWFrZXNDYWxscywKKyAgICB9OworICAgIAorICAgIFB1dEJ5U3RhdHVzKCkK
KyAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBQdXRCeVN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0YXRlKHN0
YXRlKQorICAgIHsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUp
IHsKKyAgICAgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBjYXNlIExpa2VseVRha2Vz
U2xvd1BhdGg6CisgICAgICAgIGNhc2UgT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoOgorICAgICAgICBj
YXNlIE1ha2VzQ2FsbHM6CisgICAgICAgIGNhc2UgT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2Fs
bHM6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFB1dEJ5U3RhdHVzKFN0dWJJbmZv
U3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBQdXRCeVN0YXR1cyhjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUpCisgICAg
eworICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBC
eXRlY29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7Cisg
ICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIGlzRGlyZWN0LCBQcml2YXRl
RmllbGRQdXRLaW5kKTsKKyAgICAKKyAgICBzdGF0aWMgUHV0QnlTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0
dXNDb250ZXh0U3RhY2smLCBDb2RlT3JpZ2luKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3Rh
dGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9y
aWdpbik7CisjZW5kaWYKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGU7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAh
PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgTGlrZWx5
VGFrZXNTbG93UGF0aDoKKyAgICAgICAgY2FzZSBPYnNlcnZlZFRha2VzU2xvd1BhdGg6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsK
KyAgICBQdXRCeVN0YXR1cyBzbG93VmVyc2lvbigpIGNvbnN0OworICAgIGJvb2wgb2JzZXJ2ZWRT
dHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBPYnNl
cnZlZFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXND
YWxsczsgfQorICAgIAorICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPFB1dEJ5VmFyaWFudCwgMT4mIHZh
cmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5VmFy
aWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsg
fQorICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xlSWRl
bnRpZmllcigpIGNvbnN0OworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwor
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFB1dEJ5
U3RhdHVzJik7CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
I2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5U3RhdHVzIGNvbXB1dGVGb3JTdHViSW5m
byhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworI2VuZGlmCisgICAgc3RhdGljIFB1
dEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7Cisg
ICAgCisgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5VmFyaWFudCYpOworICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKKyAgICAKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFZlY3RvcjxQ
dXRCeVZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjA3YzUzNWIzNzQwNDgxMDllNjljOTBhZDhjOWE5ZmYyOTQ4N2MyMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVZhcmlhbnQuY3Bw
CkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5VmFyaWFu
dC5oIgorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitQdXRCeVZhcmlhbnQ6OlB1dEJ5VmFyaWFudChjb25zdCBQdXRCeVZhcmlhbnQm
IG90aGVyKQorICAgIDogUHV0QnlWYXJpYW50KG90aGVyLm1faWRlbnRpZmllcikKK3sKKyAgICAq
dGhpcyA9IG90aGVyOworfQorCitQdXRCeVZhcmlhbnQmIFB1dEJ5VmFyaWFudDo6b3BlcmF0b3I9
KGNvbnN0IFB1dEJ5VmFyaWFudCYgb3RoZXIpCit7CisgICAgbV9raW5kID0gb3RoZXIubV9raW5k
OworICAgIG1fb2xkU3RydWN0dXJlID0gb3RoZXIubV9vbGRTdHJ1Y3R1cmU7CisgICAgbV9uZXdT
dHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKKyAgICBtX2NvbmRpdGlvblNldCA9IG90
aGVyLm1fY29uZGl0aW9uU2V0OworICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAg
aWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBt
YWtlVW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAg
ZWxzZQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gbnVsbHB0cjsKKyAgICBtX2lkZW50aWZp
ZXIgPSBvdGhlci5tX2lkZW50aWZpZXI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQdXRCeVZh
cmlhbnQgUHV0QnlWYXJpYW50OjpyZXBsYWNlKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBQdXRCeVZhcmlhbnQgcmVzdWx0KFdURk1vdmUoaWRlbnRpZmllcikpOworICAgIHJl
c3VsdC5tX2tpbmQgPSBSZXBsYWNlOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUHV0QnlWYXJpYW50IFB1dEJ5VmFyaWFudDo6dHJhbnNpdGlvbihDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIFB1dEJ5VmFyaWFudCBy
ZXN1bHQoV1RGTW92ZShpZGVudGlmaWVyKSk7CisgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRp
b247CisgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgIHJlc3Vs
dC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQ7CisgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1B1dEJ5VmFyaWFudCBQdXRCeVZhcmlhbnQ6OnNldHRlcihDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtT
dGF0dXMpCit7CisgICAgUHV0QnlWYXJpYW50IHJlc3VsdChXVEZNb3ZlKGlkZW50aWZpZXIpKTsK
KyAgICByZXN1bHQubV9raW5kID0gU2V0dGVyOworICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKKyAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Cisg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVz
ID0gV1RGTW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3Ry
dWN0dXJlKiBQdXRCeVZhcmlhbnQ6Om9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSBjb25zdAor
eworICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX29sZFN0cnVjdHVyZS5zaXplKCkgPD0gMik7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9vbGRTdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbV9vbGRTdHJ1Y3R1cmVbaV07CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gbV9u
ZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgUHV0QnlWYXJpYW50OjpmaXhUcmFuc2l0aW9uVG9SZXBsYWNlSWZOZWNlc3NhcnkoKQor
eworICAgIGlmIChraW5kKCkgIT0gVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fb2xkU3RydWN0dXJlLnNpemUoKSA8PSAyKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX29sZFN0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX29sZFN0cnVjdHVyZVtpXTsKKyAgICAgICAgaWYgKHN0cnVj
dHVyZSAhPSBtX25ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgbV9uZXdTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIG1fa2luZCA9IFJlcGxhY2U7Cisg
ICAgbV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2NhbGxMaW5rU3RhdHVzKTsKK30KKworYm9vbCBQdXRCeVZhcmlhbnQ6
OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
Y2FzZSBUcmFuc2l0aW9uOgorICAgIGNhc2UgU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFB1
dEJ5VmFyaWFudDo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtp
bmQoKSkgeworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgcmV0dXJuIG9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBQdXRCeVZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHJldHVybiBraW5kKCkg
PT0gU2V0dGVyOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3Qg
UHV0QnlWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhl
ci5tX2lkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2lkZW50
aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb3RT
ZXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIHN3aXRjaCAo
b3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICAgICAgQVNT
RVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQob3RoZXIu
bV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9v
bGRTdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRyYW5zaXRp
b246IHsKKyAgICAgICAgICAgIFB1dEJ5VmFyaWFudCBuZXdWYXJpYW50ID0gb3RoZXI7CisgICAg
ICAgICAgICBpZiAobmV3VmFyaWFudC5hdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25XaXRoUmVwbGFj
ZSgqdGhpcykpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG5ld1ZhcmlhbnQ7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFRyYW5zaXRpb246CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNh
c2UgUmVwbGFjZToKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9NZXJnZVRyYW5zaXRpb25X
aXRoUmVwbGFjZShvdGhlcik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9u
OiB7CisgICAgICAgICAgICBpZiAobV9vbGRTdHJ1Y3R1cmUgIT0gb3RoZXIubV9vbGRTdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgIT0gb3RoZXIubV9uZXdTdHJ1Y3R1cmUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1lcmdlZENvbmRp
dGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQp
OworICAgICAgICAgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXR0
ZXI6IHsKKyAgICAgICAgaWYgKG90aGVyLm1fa2luZCAhPSBTZXR0ZXIpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoIShtX2NhbGxMaW5rU3Rh
dHVzICYmIG90aGVyLm1fY2FsbExpbmtTdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtZXJnZWRDb25kaXRpb25TZXQ7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5t
ZXJnZWRXaXRoKG90aGVyLm1fY29uZGl0aW9uU2V0KTsKKyAgICAgICAgICAgIGlmICghbWVyZ2Vk
Q29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2VkQ29uZGl0aW9uU2V0Lmhhc09uZVNsb3RC
YXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgICAgICAK
KyAgICAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCisgICAgICAgICAgICBtX2NhbGxMaW5rU3Rh
dHVzLT5tZXJnZSgqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CisgICAgICAgIAorICAgICAgICBt
X29sZFN0cnVjdHVyZS5tZXJnZShvdGhlci5tX29sZFN0cnVjdHVyZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFB1dEJ5VmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2VUcmFuc2l0aW9uV2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKQorewor
ICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgQVNTRVJUKHJlcGxhY2UubV9r
aW5kID09IFJlcGxhY2UpOworICAgIEFTU0VSVChtX29mZnNldCA9PSByZXBsYWNlLm1fb2Zmc2V0
KTsKKyAgICBBU1NFUlQoIXJlcGxhY2Uud3JpdGVzU3RydWN0dXJlcygpKTsKKyAgICBBU1NFUlQo
IXJlcGxhY2UucmVhbGxvY2F0ZXNTdG9yYWdlKCkpOworICAgIEFTU0VSVChyZXBsYWNlLmNvbmRp
dGlvblNldCgpLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhpcyBzb3J0IG9mIG1lcmdpbmcg
b25seSB3b3JrcyB3aGVuIHdlIGhhdmUgb25lIHBhdGggYWxvbmcgd2hpY2ggd2UgYWRkIGEgbmV3
IGZpZWxkIHdoaWNoCisgICAgLy8gdHJhbnNpdGlvbnMgdG8gc3RydWN0dXJlIFMgd2hpbGUgdGhl
IG90aGVyIHBhdGggd2FzIGFscmVhZHkgb24gc3RydWN0dXJlIFMuIFRoaXMgZG9lc24ndAorICAg
IC8vIHdvcmsgaWYgd2UgbmVlZCB0byByZWFsbG9jYXRlIGFueXRoaW5nIG9yIGlmIHRoZSByZXBs
YWNlIHBhdGggaXMgcG9seW1vcnBoaWMuCisgICAgCisgICAgaWYgKHJlYWxsb2NhdGVzU3RvcmFn
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcGxhY2UubV9vbGRT
dHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpICE9IG1fbmV3U3RydWN0dXJlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgbV9vbGRTdHJ1Y3R1cmUubWVyZ2UobV9uZXdTdHJ1Y3R1cmUp
OworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9p
ZCBQdXRCeVZhcmlhbnQ6OnZpc2l0QWdncmVnYXRlSW1wbChWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworREVGSU5FX1ZJ
U0lUX0FHR1JFR0FURShQdXRCeVZhcmlhbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
Pgordm9pZCBQdXRCeVZhcmlhbnQ6Om1hcmtJZkNoZWFwKFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgbV9vbGRTdHJ1Y3R1cmUubWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKG1fbmV3U3Ry
dWN0dXJlKQorICAgICAgICBtX25ld1N0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cit9
CisKK3RlbXBsYXRlIHZvaWQgUHV0QnlWYXJpYW50OjptYXJrSWZDaGVhcChBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFB1dEJ5VmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZp
c2l0b3ImKTsKKworYm9vbCBQdXRCeVZhcmlhbnQ6OmZpbmFsaXplKFZNJiB2bSkKK3sKKyAgICBp
ZiAoIW1fb2xkU3RydWN0dXJlLmlzU3RpbGxBbGl2ZSh2bSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9uZXdTdHJ1Y3R1cmUgJiYgIXZtLmhlYXAuaXNNYXJrZWQobV9uZXdTdHJ1
Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5h
cmVTdGlsbExpdmUodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2FsbExp
bmtTdGF0dXMgJiYgIW1fY2FsbExpbmtTdGF0dXMtPmZpbmFsaXplKHZtKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFB1dEJ5VmFyaWFudDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxs
cHRyKTsKK30KKwordm9pZCBQdXRCeVZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8Iik7
CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyLCAiJywgIik7CisgICAgc3dpdGNo
IChraW5kKCkpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJlbXB0eT4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAg
IG91dC5wcmludCgKKyAgICAgICAgICAgICJSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJl
KCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgIj4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5w
cmludCgKKyAgICAgICAgICAgICJUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJl
KCksIGNvbnRleHQpLCAiIHRvICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChu
ZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1f
Y29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCAi
PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0dGVyOgorICAgICAg
ICBvdXQucHJpbnQoCisgICAgICAgICAgICAiU2V0dGVyOiAiLCBpbkNvbnRleHQoc3RydWN0dXJl
KCksIGNvbnRleHQpLCAiLCBbIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNl
dCwgY29udGV4dCksICJdIik7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29m
ZnNldCk7CisgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMp
OworICAgICAgICBvdXQucHJpbnQoIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFy
aWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5VmFyaWFudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgxNDAyYjQyNTZhZGU3ZTA1NjUwYTlmZjBmNjg0NWVjMWIzMWViNGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlWYXJpYW50
LmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rU3RhdHVz
OworCitjbGFzcyBQdXRCeVZhcmlhbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFj
ZSwKKyAgICAgICAgVHJhbnNpdGlvbiwKKyAgICAgICAgU2V0dGVyCisgICAgfTsKKyAgICAKKyAg
ICBQdXRCeVZhcmlhbnQoQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgICAgICA6
IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAgICAg
ICAgLCBtX25ld1N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1faWRlbnRpZmllcihXVEZN
b3ZlKGlkZW50aWZpZXIpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHV0QnlWYXJpYW50KGNv
bnN0IFB1dEJ5VmFyaWFudCYpOworICAgIFB1dEJ5VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1
dEJ5VmFyaWFudCYpOworCisgICAgc3RhdGljIFB1dEJ5VmFyaWFudCByZXBsYWNlKENhY2hlYWJs
ZUlkZW50aWZpZXIsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAK
KyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHRyYW5zaXRpb24oQ2FjaGVhYmxlSWRlbnRpZmllciwg
Y29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAg
ICAKKyAgICBzdGF0aWMgUHV0QnlWYXJpYW50IHNldHRlcihDYWNoZWFibGVJZGVudGlmaWVyLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+KTsKKyAgICAKKyAg
ICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlz
U2V0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFJlcGxhY2UgfHwga2luZCgpID09IFNldHRlcik7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVj
dHVyZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtp
bmQoKSA9PSBSZXBsYWNlIHx8IGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9v
bGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlIHx8IGtp
bmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQor
ICAgIAorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBvbGRTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
KTsKKyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGZpeFRyYW5zaXRpb25Ub1JlcGxhY2VJZk5lY2Vzc2FyeSgpOworCisgICAgYm9vbCB3cml0ZXNT
dHJ1Y3R1cmVzKCkgY29uc3Q7CisgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsK
KyAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGludHJpbnNpY3MgZm9yIFNl
dHRlcnMgKGl0IHdvdWxkIGJlIHN3ZWV0IGlmIHdlIGRpZCkgYnV0IHdlIG5lZWQgdGhpcyBmb3Ig
dGVtcGxhdGVkIGhlbHBlcnMuCisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsgcmV0
dXJuIE5vSW50cmluc2ljOyB9CisKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGVtcGxhdGVk
IGhlbHBlcnMuCisgICAgYm9vbCBpc1Byb3BlcnR5VW5zZXQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAK
KyAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgICAgICByZXR1cm4gbV9jYWxsTGlua1N0
YXR1cy5nZXQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5
VmFyaWFudCYgb3RoZXIpOworICAgIAorICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgbWFya0lmQ2hlYXAoVmlzaXRvciYpOwor
ICAgIGJvb2wgZmluYWxpemUoVk0mKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFB1dEJ5
VmFyaWFudCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFv
dGhlci5tX2lkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KG1faWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5t
X2lkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQo
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2VUcmFuc2l0aW9u
V2l0aFJlcGxhY2UoY29uc3QgUHV0QnlWYXJpYW50JiByZXBsYWNlKTsKKyAgICAKKyAgICBLaW5k
IG1fa2luZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBTdHJ1Y3R1cmVTZXQg
bV9vbGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZSB7IG51bGxwdHIg
fTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CisgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2Vz
LmNwcAppbmRleCAwYzRjMDc0N2EwYWI4NWZiM2FmODE3ZDI5NDVkNjIxYWRjM2ViYWQ3Li5mY2Uw
ZjRkOGVlMTBlZGRiY2YzYzc1NGVmODMzYTM1YmU5N2RiYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCkBAIC02MiwxMCAr
NjIsMTAgQEAgR2V0QnlTdGF0dXMqIFJlY29yZGVkU3RhdHVzZXM6OmFkZEdldEJ5U3RhdHVzKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIGNvbnMKICAgICByZXR1cm4gcmVzdWx0OwogfQog
ICAgIAotUHV0QnlJZFN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlJZFN0YXR1cyhj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBjb25zdCBQdXRCeUlkU3RhdHVzJiBzdGF0dXMp
CitQdXRCeVN0YXR1cyogUmVjb3JkZWRTdGF0dXNlczo6YWRkUHV0QnlTdGF0dXMoY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbiwgY29uc3QgUHV0QnlTdGF0dXMmIHN0YXR1cykKIHsKLSAgICBh
dXRvIHN0YXR1c1B0ciA9IG1ha2VVbmlxdWU8UHV0QnlJZFN0YXR1cz4oc3RhdHVzKTsKLSAgICBQ
dXRCeUlkU3RhdHVzKiByZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CisgICAgYXV0byBzdGF0dXNQ
dHIgPSBtYWtlVW5pcXVlPFB1dEJ5U3RhdHVzPihzdGF0dXMpOworICAgIFB1dEJ5U3RhdHVzKiBy
ZXN1bHQgPSBzdGF0dXNQdHIuZ2V0KCk7CiAgICAgcHV0cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
Y29kZU9yaWdpbiwgV1RGTW92ZShzdGF0dXNQdHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTEwNyw2ICsxMDcsOCBAQCB2b2lkIFJlY29yZGVkU3RhdHVzZXM6OnZpc2l0QWdncmVnYXRl
SW1wbChWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCiAg
ICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBwdXRzKQorICAgICAgICBwYWlyLnNlY29uZC0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogaW5zKQogICAgICAgICBwYWlyLnNlY29uZC0+
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogZGVsZXRlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1
c2VzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5o
CmluZGV4IGJkMTU3MDU0NTczODBjMzc3Yjg0Mjg2ZDUzYWE4NjhhMzI2MzI0YjUuLjk0OTgzZGJj
NzY3ZDA3ZTI4MDRiZDQ0MmMzN2ViNTRjZjQ1N2JhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuaApAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgIkRlbGV0ZUJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0QnlTdGF0dXMuaCIKICNp
bmNsdWRlICJJbkJ5U3RhdHVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1
ZGUgIlB1dEJ5U3RhdHVzLmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNl
cyB7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGFkZENhbGxMaW5rU3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mLCBjb25zdCBDYWxsTGlua1N0YXR1cyYpOwogICAgIEdldEJ5U3RhdHVzKiBhZGRH
ZXRCeVN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgR2V0QnlTdGF0dXMmKTsKLSAgICBQ
dXRCeUlkU3RhdHVzKiBhZGRQdXRCeUlkU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBQ
dXRCeUlkU3RhdHVzJik7CisgICAgUHV0QnlTdGF0dXMqIGFkZFB1dEJ5U3RhdHVzKGNvbnN0IENv
ZGVPcmlnaW4mLCBjb25zdCBQdXRCeVN0YXR1cyYpOwogICAgIEluQnlTdGF0dXMqIGFkZEluQnlT
dGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IEluQnlTdGF0dXMmKTsKICAgICBEZWxldGVC
eVN0YXR1cyogYWRkRGVsZXRlQnlTdGF0dXMoY29uc3QgQ29kZU9yaWdpbiYsIGNvbnN0IERlbGV0
ZUJ5U3RhdHVzJik7CiAgICAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMqIGFkZENoZWNrUHJpdmF0
ZUJyYW5kU3RhdHVzKGNvbnN0IENvZGVPcmlnaW4mLCBjb25zdCBDaGVja1ByaXZhdGVCcmFuZFN0
YXR1cyYpOwpAQCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgUmVjb3JkZWRTdGF0dXNlcyB7CiAgICAg
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+Pj4gY2FsbHM7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6
OnVuaXF1ZV9wdHI8R2V0QnlTdGF0dXM+Pj4gZ2V0czsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPENv
ZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxQdXRCeUlkU3RhdHVzPj4+IHB1dHM7CisgICAgVmVj
dG9yPHN0ZDo6cGFpcjxDb2RlT3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UHV0QnlTdGF0dXM+Pj4g
cHV0czsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxJ
bkJ5U3RhdHVzPj4+IGluczsKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvZGVPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxEZWxldGVCeVN0YXR1cz4+PiBkZWxldGVzOwogICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29kZU9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPENoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzPj4+
IGNoZWNrUHJpdmF0ZUJyYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDc1OTE4ZjY3NzMxODNjZGZjZWIyM2Rj
M2NjMjFkMzI3ZTlmYTE4NjguLmYyN2I3Mzc0ZWY5YWVlMTA3YTcwMTZkYTg4MWJjZWRmNzgxOWQ0
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcApAQCAtMjgxLDggKzI4MSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
OjpyZXNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayog
YwogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0R2V0
QnkoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0OgotICAgICAgICByZXNldFB1dEJ5SUQoY29k
ZUJsb2NrLCAqdGhpcyk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBy
ZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHJlc2V0UHV0Qnko
Y29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgogICAgICAgICByZXNldEluQnkoY29kZUJsb2NrLCAq
dGhpcywgSW5CeUtpbmQ6OkJ5SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAppbmRleCA3MzA0ZmIxNTRlODQwZDg1ZGEyOGU2ZTI1
MDFhYWIxOGU1NWQ0MWE0Li5lNjdiYzEwOGJlMzIwZGQ2ZDI1OWU3N2M4MWI5ZDUxYzQ1Y2Y1ODRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaApAQCAtNTQsNyArNTQsOCBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Qg
ewogICAgIEdldEJ5SWREaXJlY3QsCiAgICAgVHJ5R2V0QnlJZCwKICAgICBHZXRCeVZhbCwKLSAg
ICBQdXQsCisgICAgUHV0QnlJZCwKKyAgICBQdXRCeVZhbCwKICAgICBJbkJ5SWQsCiAgICAgSW5C
eVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTM2NSw2ICszNjYsNyBAQCBjbGFzcyBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIEdQUlJlZyBicmFuZEdQUjsKICAgICB9IHJlZ3M7CiAg
ICAgR1BSUmVnIG1fc3R1YkluZm9HUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1f
YXJyYXlQcm9maWxlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSOwogICAgIC8vIEZJWE1FOiBbMzItYml0c10gQ2hlY2sg
aWYgU3RydWN0dXJlU3R1YkluZm86OmJhc2VUYWdHUFIgaXMgdXNlZCBzb21ld2hlcmUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKaW5kZXggZDFjMGI0NmE2YTkwNzM5MDM1OWRkMzBjMGNlNjhjMTFjMTdiMjgy
MS4uMDdjMmQxZjM1ZGIyZjU5NDYxYTQ5NzQ5NWEzZmEyYzc0NDZjNzdhNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaApAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9y
LmgiCi0jaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5U3RhdHVzLmgi
CiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2V0UHJpdmF0ZUJyYW5kU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC0zOTczLDcgKzM5NzMsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1
cmVzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERh
dGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFu
dCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAgICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0IHRoaXNTZXQgPSAqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihi
YXNlKTsKICAgICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKQEAgLTM5ODIsNyArMzk4
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
IHRoaXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CiAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5t
ZXJnZSh0aGlzVmFsdWUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJT
dHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRo
aXNTZXQub25seVN0cnVjdHVyZSgpICE9IG5ld1N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAg
ICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0zOTkwLDcgKzM5OTAsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIH0gLy8gZWxzZSB0aGlzIGlzIHJlYWxseSBh
IHJlcGxhY2UuCiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdTdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAgICAgICAgICAgICAgIG5l
d1NldC5tZXJnZSh0aGlzU2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDE0MCwx
MCArNDE0MCwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAoT3B0aW9u
czo6dXNlQWNjZXNzSW5saW5pbmcoKSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7
CiAgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0gbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0
IHx8IG5vZGUtPm9wKCkgPT0gUHV0UHJpdmF0ZU5hbWVCeUlkOwogICAgICAgICAgICAgYXV0byBw
cml2YXRlRmllbGRQdXRLaW5kID0gbm9kZS0+b3AoKSA9PSBQdXRQcml2YXRlTmFtZUJ5SWQgPyBu
b2RlLT5wcml2YXRlRmllbGRQdXRLaW5kKCkgOiBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCk7
Ci0gICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCisgICAgICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29t
cHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnRvU3Ry
dWN0dXJlU2V0KCksCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LnVpZCgpLAorICAgICAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAg
ICAgICAgICAgICAgICBpc0RpcmVjdCwgcHJpdmF0ZUZpZWxkUHV0S2luZCk7CiAKICAgICAgICAg
ICAgIGJvb2wgYWxsR29vZCA9IHRydWU7CkBAIC00MTUxLDcgKzQxNTEsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3
U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewogICAgICAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiB2YXJpYW50LmNvbmRpdGlvblNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZ3JhcGgud2F0Y2hDb25kaXRpb24oY29uZGl0aW9uKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFsbEdvb2QgPSBmYWxzZTsKQEAgLTQxNjIsMTQgKzQxNjIsMTQgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxHb29kKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24p
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbmV3U3RydWN0
dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdT
ZXQuYWRkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5VmFyaWFudDo6UmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdTZXQubWVyZ2UoKm1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJl
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0NzMs
NyArNDQ3Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBFeGl0T0s6CiAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CkBAIC00NjUy
LDEwICs0NjUyLDEwIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmZpbHRlcklDU3RhdHVzKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCi0gICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOiB7CisgICAgY2FzZSBGaWx0ZXJQ
dXRCeVN0YXR1czogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkK
LSAgICAgICAgICAgIG5vZGUtPnB1dEJ5SWRTdGF0dXMoKS0+ZmlsdGVyKHZhbHVlLm1fc3RydWN0
dXJlLnRvU3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgbm9kZS0+cHV0QnlTdGF0dXMoKS0+
ZmlsdGVyKHZhbHVlLm1fc3RydWN0dXJlLnRvU3RydWN0dXJlU2V0KCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4IGMyMTZhMzk2ZDcxNjA0MjBkZmI0
ODE1ZjEyN2U3ODU5ZDVhOTE3M2IuLjZlMjc1MzEwNGJkMzgxNTljY2IxYjFkMzkzNzE1Mzg2YjY0
ODZiNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtNDAyLDcgKzQwMiw3IEBAIGNsYXNzIEFy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBG
aWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeVN0YXR1czoKICAgICAgICAgICAg
ICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVz
OgpAQCAtMTI2NSw3ICsxMjY1LDcgQEAgY2xhc3MgQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVy
R2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgor
ICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlcklu
QnlTdGF0dXM6CiAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXgg
NjNlNjhkMDM3ZmUxMTEwMWFlNDEyYTI3ODIyNTNmNTk0M2JkNjI3Yi4uYzQ1NWViNWJkNTAwNWQ3
ZGY3NTFkZjBhMjQ3NTFjZmJiMWU1NTk3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJB
cnJheVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkJ1aWx0aW5OYW1lcy5oIgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtNzQsNyAr
NzMsNyBAQAogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlByaXZh
dGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKLSNpbmNsdWRlICJQ
dXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJSZWdF
eHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCIKICNpbmNs
dWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtMjM5LDExICsyMzgsMTEgQEAgY2xhc3MgQnl0ZUNv
ZGVQYXJzZXIgewogICAgIGJvb2wgY2hlY2tQcmVzZW5jZShKU09iamVjdCoga25vd25CYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICB2b2lkIGNoZWNrUHJlc2VuY2VGb3JSZXBsYWNlKE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAotICAg
IC8vIFdvcmtzIHdpdGggYm90aCBHZXRCeVZhcmlhbnQgYW5kIHRoZSBzZXR0ZXIgZm9ybSBvZiBQ
dXRCeUlkVmFyaWFudC4KKyAgICAvLyBXb3JrcyB3aXRoIGJvdGggR2V0QnlWYXJpYW50IGFuZCB0
aGUgc2V0dGVyIGZvcm0gb2YgUHV0QnlWYXJpYW50LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
cmlhbnRUeXBlPgogICAgIE5vZGUqIGxvYWQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIGNvbnN0IFZhcmlhbnRUeXBlJik7CiAKLSAgICBOb2Rl
KiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeUlkVmFy
aWFudCYsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmLCBOb2RlKiB2YWx1ZSk7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICB2b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVj
dGlvbiopOwpAQCAtMjUzLDEzICsyNTIsMTMgQEAgY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogICAg
IHZvaWQgaGFuZGxlR2V0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZGVzdGluYXRpb24sIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzKTsK
ICAgICB2b2lkIGVtaXRQdXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBib29sIGlzRGlyZWN0
LCBFQ01BTW9kZSk7CisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIE5v
ZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlTdGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7
CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAotICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3Qg
UHV0QnlJZFN0YXR1cyYsCisgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1
cyYsCiAgICAgICAgIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBF
Q01BTW9kZSk7CiAKICAgICB2b2lkIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZCgKLSAgICAgICAg
Tm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLCBQcml2YXRlRmllbGRQdXRLaW5k
KTsKKyAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5U3RhdHVzJiwgUHJpdmF0ZUZp
ZWxkUHV0S2luZCk7CiAKICAgICB2b2lkIGhhbmRsZURlbGV0ZUJ5SWQoCiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgRGVsZXRlQnlTdGF0dXMsIEVDTUFNb2RlKTsKQEAg
LTQ1MTQsNyArNDUxMyw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAg
ICAgICAgIC8vIHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZSBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkg
dXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZgogICAgICAgICAgICAgICAgIC8v
IHRoZSBzdHJ1Y3R1cmVzIGluIHRoZSB2YXJpYW50LnN0cnVjdHVyZVNldCgpIGFncmVlIG9uIHRo
ZSBwcm90b3R5cGUgKGl0IHdvdWxkIGJlCiAgICAgICAgICAgICAgICAgLy8gaGlsYXJpb3VzbHkg
cmFyZSBpZiB0aGV5IGRpZG4ndCkuIE5vdGUgdGhhdCB3ZSBhcmUgcmVseWluZyBvbiBzdHJ1Y3R1
cmVTZXQoKSBoYXZpbmcKLSAgICAgICAgICAgICAgICAvLyBhdCBsZWFzdCBvbmUgZWxlbWVudC4g
VGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlIGhlcmUgYmVjYXVzZSBvZiBob3cgR2V0QnlTdGF0dXMv
UHV0QnlJZFN0YXR1cyB3b3JrLgorICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBlbGVt
ZW50LiBUaGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaGVyZSBiZWNhdXNlIG9mIGhvdyBHZXRCeVN0
YXR1cy9QdXRCeVN0YXR1cyB3b3JrLgogCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJpZ2h0
IG5vdywgaWYgd2UgaGF2ZSBhbiBPUENTLCB3ZSBoYXZlIG1vbm8gcHJvdG8uIEhvd2V2ZXIsIHRo
aXMgd2lsbAogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0
dXJlIG9uY2Ugd2UgaGF2ZSBhIGh5YnJpZCBkYXRhIHN0cnVjdHVyZSBmb3IKQEAgLTQ1OTMsOSAr
NDU5Miw5IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIHJldHVybiBsb2FkZWRW
YWx1ZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCBOb2RlKiB2YWx1
ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBjb25zdCBQdXRCeVZhcmlhbnQmIHZhcmlhbnQsIE5vZGUqIHZhbHVlKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJl
cGxhY2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUZvclJlcGxhY2UoYmFzZSwgbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVy
ZSgpKTsKICAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFy
aWFudC5vZmZzZXQoKSwgdmFsdWUpOwpAQCAtNDk5OCwzOSArNDk5NywzOSBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbkJ5SWQoVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2Rl
KiBiYXNlLCBDYWNoZQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKLSAg
ICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5vZGUqIHZhbHVl
LCBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBFQ01B
TW9kZSBlY21hTW9kZSkKKyAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wg
aXNEaXJlY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlmIChpc0RpcmVjdCkKICAgICAg
ICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhl
Y21hTW9kZSksIGJhc2UsIHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIGFkZFRvR3JhcGgocHV0
QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlkLCBPcEluZm8o
aWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgYWRk
VG9HcmFwaChwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkgPyBQdXRCeUlkRmx1c2ggOiBQdXRCeUlk
LCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhlY21hTW9kZSksIGJhc2UsIHZhbHVlKTsKIH0K
IAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICBOb2RlKiBiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IE5vZGUqIHZhbHVlLAotICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJv
b2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9k
ZSkKKyAgICBjb25zdCBQdXRCeVN0YXR1cyYgcHV0QnlTdGF0dXMsIGJvb2wgaXNEaXJlY3QsIEJ5
dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKLSAgICBpZiAo
IXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygp
IHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7Ci0gICAgICAgIGlmICghcHV0QnlJ
ZFN0YXR1cy5pc1NldCgpKQorICAgIGlmICghcHV0QnlTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0
QnlTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkg
eworICAgICAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2V0KCkpCiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAgICBlbWl0
UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBl
Y21hTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHB1dEJ5SWRT
dGF0dXMubnVtVmFyaWFudHMoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5p
c0ZUTCgpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisgICAgaWYgKHB1dEJ5U3RhdHVz
Lm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwo
KSB8fCBwdXRCeVN0YXR1cy5tYWtlc0NhbGxzKCkKICAgICAgICAgICAgIHx8ICFPcHRpb25zOjp1
c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkKLSAgICAgICAgICAgIHx8IHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKSA+IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQWNjZXNzSW5saW5pbmdM
aXN0U2l6ZSgpKSB7Ci0gICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgIHx8
IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0FjY2Vz
c0lubGluaW5nTGlzdFNpemUoKSkgeworICAgICAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRl
bnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5
U3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IGlmIChwdXRCeVN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeVZhcmlhbnQ6OlRy
YW5zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGlmICghY2hlY2socHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNvbmRpdGlvblNldCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCB2YWx1
ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNoZWNrKHB1dEJ5U3RhdHVzW3ZhcmlhbnRJbmRleF0uY29uZGl0aW9uU2V0KCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIHZhbHVlLCBw
dXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUwMzksMjggKzUwMzgs
MjggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKFVO
TElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBp
bGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CiAKLSAgICAgICAgYWRkVG9HcmFwaChG
aWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNl
cygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykp
LCBiYXNlKTsKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29k
ZU9yaWdpbigpLCBwdXRCeVN0YXR1cykpLCBiYXNlKTsKIAotICAgICAgICBmb3IgKGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKSB7CisgICAg
ICAgIGZvciAoY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50IDogcHV0QnlTdGF0dXMudmFyaWFu
dHMoKSkgewogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQu
b2xkU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVy
ZShzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5
T2Zmc2V0RGF0YS5hZGQoKTsKLSAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVz
LnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlTdGF0dXMudmFyaWFu
dHMoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CiAgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBiYXNl
LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKHB1dEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKLSAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgQVNTRVJUKHB1dEJ5U3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlT
dGF0dXNbMF07CiAgICAgCiAgICAgc3dpdGNoICh2YXJpYW50LmtpbmQoKSkgewotICAgIGNhc2Ug
UHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2U6IHsKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRC
eUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1
dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsK
KyAgICBjYXNlIFB1dEJ5VmFyaWFudDo6UmVwbGFjZTogeworICAgICAgICBhZGRUb0dyYXBoKEZp
bHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2Up
OwogCiAgICAgICAgIHN0b3JlKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVl
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MDY4
LDEyICs1MDY3LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOworICAgIGNhc2UgUHV0QnlWYXJp
YW50OjpUcmFuc2l0aW9uOiB7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMs
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMo
Y3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAKICAgICAgICAgYWRk
VG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZh
cmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFu
dC5jb25kaXRpb25TZXQoKSkpIHsKLSAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgZWNtYU1vZGUpOworICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5U3RhdHVzLCBp
c0RpcmVjdCwgZWNtYU1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAg
LTUxMzUsMTIgKzUxMzQsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFu
dDo6U2V0dGVyOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisgICAgY2FzZSBQdXRC
eVZhcmlhbnQ6OlNldHRlcjogeworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVz
LCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVz
KGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIE5v
ZGUqIGxvYWRlZFZhbHVlID0gbG9hZChTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50KTsKICAgICAgICAgaWYgKCFsb2FkZWRWYWx1ZSkgewotICAgICAgICAgICAg
ZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGly
ZWN0LCBlY21hTW9kZSk7CisgICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVy
LCB2YWx1ZSwgcHV0QnlTdGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01MTg0LDI2ICs1MTgzLDI2IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgfQogICAgIAogICAgIGRlZmF1bHQ6
IHsKLSAgICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgdmFsdWUsIHB1dEJ5SWRT
dGF0dXMsIGlzRGlyZWN0LCBlY21hTW9kZSk7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlk
ZW50aWZpZXIsIHZhbHVlLCBwdXRCeVN0YXR1cywgaXNEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0gfQogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQ
cml2YXRlTmFtZUJ5SWQoCiAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25z
dCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZh
dGVGaWVsZFB1dEtpbmQpCisgICAgY29uc3QgUHV0QnlTdGF0dXMmIHB1dEJ5U3RhdHVzLCBQcml2
YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQpCiB7Ci0gICAgaWYgKCFwdXRCeUlk
U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0
aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewotICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMu
aXNTZXQoKSkKKyAgICBpZiAoIXB1dEJ5U3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5U3RhdHVz
Lm51bVZhcmlhbnRzKCkgfHwgIU9wdGlvbnM6OnVzZUFjY2Vzc0lubGluaW5nKCkpIHsKKyAgICAg
ICAgaWYgKCFwdXRCeVN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3Jj
ZU9TUkV4aXQpOwogICAgICAgICBhZGRUb0dyYXBoKFB1dFByaXZhdGVOYW1lQnlJZCwgT3BJbmZv
KGlkZW50aWZpZXIpLCBPcEluZm8ocHJpdmF0ZUZpZWxkUHV0S2luZCksIGJhc2UsIHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1W
YXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgfHwg
cHV0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkKKyAgICBpZiAocHV0QnlTdGF0dXMubnVtVmFyaWFu
dHMoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpIHx8IHB1dEJ5
U3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3Jw
aGljQWNjZXNzSW5saW5pbmcoKQotICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJp
YW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkp
IHsKKyAgICAgICAgICAgIHx8IHB1dEJ5U3RhdHVzLm51bVZhcmlhbnRzKCkgPiBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nTGlzdFNpemUoKSkgewogICAgICAgICAgICAgYWRk
VG9HcmFwaChQdXRQcml2YXRlTmFtZUJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHBy
aXZhdGVGaWVsZFB1dEtpbmQpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTUyMTEsMjkgKzUyMTAsMjkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0UHJpdmF0ZU5hbWVCeUlkKAogICAgICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21w
aWxhdGlvbigpKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5s
aW5lZFB1dEJ5SWQoKTsKICAgICAKLSAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKyAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeVN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJl
Y29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeVN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRC
eVN0YXR1cykpLCBiYXNlKTsKICAgICAKLSAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkgeworICAgICAgICBmb3IgKGNv
bnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCkpIHsKICAg
ICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50Lm9sZFN0cnVjdHVy
ZSgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJl
KTsKLSAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6
OlRyYW5zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTXVs
dGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEu
YWRkKCk7Ci0gICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygp
OworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5U3RhdHVzLnZhcmlhbnRzKCk7CiAgICAg
ICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICBh
ZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51
bVZhcmlhbnRzKCkgPT0gMSk7Ci0gICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBw
dXRCeUlkU3RhdHVzWzBdOworICAgIEFTU0VSVChwdXRCeVN0YXR1cy5udW1WYXJpYW50cygpID09
IDEpOworICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5U3RhdHVzWzBdOwog
ICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKLSAgICBjYXNlIFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlOiB7CisgICAgY2FzZSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2U6IHsKICAgICAg
ICAgQVNTRVJUKHByaXZhdGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7Ci0gICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0
dXMpKSwgYmFzZSk7CisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlTdGF0dXMsIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlTdGF0dXMoY3VycmVu
dENvZGVPcmlnaW4oKSwgcHV0QnlTdGF0dXMpKSwgYmFzZSk7CiAgICAgCiAgICAgICAgIHN0b3Jl
KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQsIHZhbHVlKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCkBAIC01MjQxLDkgKzUyNDAsOSBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRQcml2YXRlTmFtZUJ5SWQoCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewor
ICAgIGNhc2UgUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uOiB7CiAgICAgICAgIEFTU0VSVChwcml2
YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkpOwotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1
dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
UHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2Up
OworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5U3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIHB1dEJ5U3RhdHVzKSksIGJhc2UpOwogICAgIAogICAgICAgICBhZGRUb0dyYXBoKENoZWNr
U3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgaWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNl
dCgpKSkgewpAQCAtNjQ1Miw0MiArNjQ1MSwzMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRl
Y29kZS5tX2Jhc2UpOwogICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3Zh
bHVlKTsKLSAgICAgICAgICAgIGJvb2wgdHJ5Q29tcGlsZUFzUHV0QnlPZmZzZXQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJvb2wgY29tcGlsZWRBc1B1dFByaXZhdGVOYW1lQnlJZCA9IGZhbHNlOwog
Ci0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOwotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzOwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcC5n
ZXQoQ29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkpLmJ5VmFs
SW5mbzsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90
IGNvbXBpbGVkIGluIHRoZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCi0g
ICAgICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4g
Rm9yIGBwdXRfcHJpdmF0ZV9uYW1lYCwgd2UgbWlnaHQgaGF2ZSBzb21lIGluZm8gZnJvbQotICAg
ICAgICAgICAgICAgIC8vIExMSW50IElDLCBpbmNsdWRpbmcgY2FjaGVkIGNlbGwgdGhhdCB3ZSBj
b3VsZCB1c2UgaWYgQnlWYWwgaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2Nzc5Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ5VmFsSW5mbyAKLSAgICAgICAgICAgICAgICAgICAgJiYgYnlWYWxJbmZvLT5z
dHViSW5mbwotICAgICAgICAgICAgICAgICAgICAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGgK
LSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUu
aGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KQotICAgICAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50
VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeUNvbXBpbGVBc1B1dEJ5T2Zmc2V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVk
SWQ7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRp
ZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51
bWJlcl07Ci0gICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBo
LmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwoKSk7CisgICAgICAgICAgICBpZiAoIW1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZElkZW50KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKQorICAgICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgICAgIFB1dEJ5U3RhdHVzIHN0YXR1cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNl
bGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5z
dHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBpZiAo
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3RhdHVzLnNpbmdsZUlkZW50aWZpZXIo
KSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRp
Zmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhpZGVudGlmaWVyLmNlbGwo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1N5bWJvbENlbGwo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFu
dCwgT3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9w
SW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJv
cGVydHkpOworCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVB1dFByaXZhdGVOYW1lQnlJZChi
YXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgc3RhdHVzLCBieXRlY29k
ZS5tX3B1dEtpbmQpOworICAgICAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0UHJpdmF0ZU5h
bWVCeUlkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICh0cnlDb21waWxlQXNQdXRCeU9mZnNldCkKLSAgICAgICAgICAgICAgICBoYW5k
bGVQdXRQcml2YXRlTmFtZUJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwg
dmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGJ5dGVjb2RlLm1fcHV0S2luZCk7Ci0gICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICBpZiAoIWNvbXBpbGVkQXNQdXRQcml2YXRlTmFtZUJ5SWQpCiAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRQcml2YXRlTmFtZSwgT3BJbmZvKCksIE9wSW5mbyhi
eXRlY29kZS5tX3B1dEtpbmQpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwogCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wdXRfcHJpdmF0ZV9uYW1lKTsKQEAgLTY1NjcsMTIgKzY1NTYsMTIg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKIAotICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVz
ID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIFB1dEJ5U3RhdHVzIHB1
dEJ5U3RhdHVzID0gUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgICAgICAg
ICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJO
dW1iZXJdKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0
YXR1cywgZGlyZWN0LCBuZXh0T3Bjb2RlSW5kZXgoKSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9k
ZSgpKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5U3Rh
dHVzLCBkaXJlY3QsIG5leHRPcGNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2Rl
KCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAgfQog
CkBAIC03OTc5LDEzICs3OTY4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNoR2xvYmFs
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSkKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgICAgICAgICAgUHV0QnlJ
ZFN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgUHV0QnlTdGF0dXMgc3RhdHVzOwogICAg
ICAgICAgICAgICAgIGlmICh1aWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFsc2Us
IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1
cyA9IFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBmYWxzZSwgUHJpdmF0ZUZpZWxk
UHV0S2luZDo6bm9uZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXMoUHV0QnlJZFN0YXR1czo6VGFrZXNTbG93UGF0aCk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFB1dEJ5U3RhdHVzKFB1dEJ5U3RhdHVzOjpM
aWtlbHlUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlh
bnRzKCkgIT0gMQotICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5r
aW5kKCkgIT0gUHV0QnlWYXJpYW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0
YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCB1aWQpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5lY21hTW9kZSgpKSwgZ2V0
KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTg4MTQsNjIgKzg4MDMsNzAgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2soKQogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2Rl
SW5kZXggb3NyRXhpdEluZGV4KQogeworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5t
X2Jhc2UpOwogICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwog
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJl
Y3QgPSBCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9v
bCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBQdXRCeUlkU3Rh
dHVzIHB1dEJ5SWRTdGF0dXM7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Jh
c2VsaW5lTWFwLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2luKCkuYnl0ZWNvZGVJbmRl
eCgpKSkuYnlWYWxJbmZvOwotICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2Rl
IGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBu
dWxsLgotICAgICAgICAgICAgLy8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlv
bi4KLSAgICAgICAgICAgIGlmIChieVZhbEluZm8gCi0gICAgICAgICAgICAgICAgJiYgYnlWYWxJ
bmZvLT5zdHViSW5mbwotICAgICAgICAgICAgICAgICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0
aAotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkKLSAgICAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkVHlwZSkKLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGJ5VmFsSW5mby0+Y2FjaGVkSWQ7Ci0gICAgICAgICAgICAgICAgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51
aWQoKSk7Ci0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogZnJvemVuID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5p
c0NlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcoaWRlbnRpZmllci5jZWxsKCkpOwogCisgICAgUHV0QnlTdGF0dXMgc3RhdHVzID0gUHV0QnlT
dGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lu
bGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29k
ZU9yaWdpbigpKTsKKworICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpCisgICAgICAgICYmICFtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRU
eXBlKQorICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAgICAgaWYgKENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkp
IHsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgp
OworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRp
ZmllcnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgp
KSB7CisgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5pc1N5bWJvbENlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lz
Q29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdWlkLT5pc1N5bWJvbCgpKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVu
dCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKwor
ICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVt
YmVyLCB2YWx1ZSwgc3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2Vj
bWFNb2RlKTsKKyAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIGlmIChzdGF0dXMudGFrZXNTbG93UGF0aCgpKSB7CisgICAgICAgICAgICAvLyBFdmVu
IHRob3VnaCBzdGF0dXMgaXMgdGFraW5nIGEgc2xvdyBwYXRoLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoaXMgbm9kZSBzdGlsbCBoYXMgY29uc3RhbnQgaWRlbnRpZmllciBhbmQgdXNpbmcgUHV0QnlJ
ZCBpcyBhbHdheXMgYmV0dGVyIGluIHRoYXQgY2FzZS4KKyAgICAgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQgPSBudWxscHRyOworICAgICAgICAgICAgSlNDZWxsKiBwcm9wZXJ0eUNlbGwg
PSBudWxscHRyOworICAgICAgICAgICAgaWYgKGF1dG8qIHN5bWJvbCA9IHByb3BlcnR5LT5keW5h
bWljQ2FzdENvbnN0YW50PFN5bWJvbCo+KCptX3ZtKSkgeworICAgICAgICAgICAgICAgIHVpZCA9
ICZzeW1ib2wtPnVpZCgpOworICAgICAgICAgICAgICAgIHByb3BlcnR5Q2VsbCA9IHN5bWJvbDsK
KyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemVTdHJv
bmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwg
T3BJbmZvKGZyb3plbiksIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0byog
c3RyaW5nID0gcHJvcGVydHktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigqbV92bSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogaW1wbCA9IHN0cmluZy0+dHJ5R2V0VmFsdWVJ
bXBsKCk7IGltcGwtPmlzQXRvbSgpICYmICFwYXJzZUluZGV4KCpjb25zdF9jYXN0PFN0cmluZ0lt
cGwqPihpbXBsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdWlkID0gYml0d2lzZV9jYXN0PFVu
aXF1ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Q2Vs
bCA9IHN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mcmVlemVTdHJvbmcoc3Ry
aW5nKTsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8o
dWlkKSwgcHJvcGVydHkpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1
YkluZm8oCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZvLCBj
dXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOwotCisgICAgICAgICAgICBpZiAodWlkKSB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKS5lbnN1cmUodWlkKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21DZWxsKHByb3BlcnR5Q2VsbCksIGlkZW50aWZp
ZXJOdW1iZXIsIHZhbHVlLCBzdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUpOworICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21waWxlZEFzUHV0QnlJ
ZCkKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmll
ck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5
dGVjb2RlLm1fZWNtYU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQp
IHsKLSAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5t
ZXRhZGF0YShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFy
cmF5OjpXcml0ZSk7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUo
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRl
KTsKIAogICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQocHJvcGVydHkpOwogICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdl
LgogICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVu
Z3RoLgotICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZh
bERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5
dGVjb2RlLm1fZWNtYU1vZGUpKTsKKyAgICAgICAgTm9kZSogcHV0QnlWYWwgPSBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAg
ICAgICAgbV9leGl0T0sgPSBmYWxzZTsgLy8gUHV0QnlWYWwgYW5kIFB1dEJ5VmFsRGlyZWN0IG11
c3QgYmUgdHJlYXRlZCBhcyBpZiB0aGV5IGNsb2JiZXIgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQ
aGFzZSBtYXkgbWFrZSB0aGVtIGdlbmVyaWMuCisgICAgICAgIGlmIChzdGF0dXMub2JzZXJ2ZWRT
dHJ1Y3R1cmVTdHViSW5mb1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd1B1
dEJ5VmFsLmFkZChwdXRCeVZhbCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDkxNjQ3MGQxN2Q1M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2Rh
MDc5NThiNGEuLjZmMjA0ZDJjNWRlMGE2MTJmNzMxYzk1N2I0NjFkY2YzMGM0YTExYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC01NjksNyArNTY5LDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50
QXJndW1lbnRzOgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcAppbmRleCA4NmEzZDA3NjY0ZDdmYTkyNzUxMjk5Nzc5ZjQ2ZjE5NzJiMGFkMGYzLi40
Y2U5ZmYwZWI1ZGE1MTBlYzIzNDA2NDYyYTcxZTg4MDk1MDk2MjJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcApAQCAtODEsNyAr
ODEsNyBAQCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBGaWx0ZXJDYWxs
TGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVy
UHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmls
dGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IGVhZWFmODVlYTI1
NDE3MjU3NTVmNDhjZWZkZWRlMDNiODFjOWZhMmEuLmI4ODI1YWNhZTM0ZTU1Zjg5MjY1OTEyOTg0
MWQ5MzI0YTQwYzE2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAi
REZHUGhhc2UuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiUHV0QnlTdGF0dXMu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CkBAIC01MDEsNyArNTAxLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OworICAgICAgICAgICAgICAgICAgICBQdXRCeVZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlh
bnRzW2ldOwogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLmdlbmVy
aWNGaWx0ZXIoWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgLT4gYm9vbCB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbnRhaW5zKG1fZ3JhcGgucmVnaXN0ZXJT
dHJ1Y3R1cmUoc3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtNTEzLDEx
ICs1MTMsOSBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlRyYW5zaXRpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09
IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
VmFyaWFudDo6cmVwbGFjZSh2YXJpYW50LmlkZW50aWZpZXIoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEy
MTMsNyArMTIxMSw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9y
YWdlLCBjaGlsZEVkZ2UpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2ln
bmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZVZh
bHVlLCBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlcikKKyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5v
ZGUqIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2VWYWx1ZSwgY29uc3QgUHV0QnlWYXJp
YW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQogICAgIHsKICAgICAgICAg
Tm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMjI0LDcgKzEyMjIsNyBAQCBjbGFzcyBDb25zdGFudEZv
bGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG51bGxw
dHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgeworICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25z
LmFkZCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQu
b2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KQEAgLTEyNjksNyArMTI2Nyw3IEBA
IGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlLCBjaGlsZEVkZ2Up
OwogICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKIAotICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5VmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAg
ICAgICAgaWYgKGRpZEFsbG9jYXRlU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEs
IFNwZWNOb25lLCBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5LApAQCAtMTQwNiwxMCArMTQw
NCwxMCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgIGlmICghYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAorICAgICAgICBQdXRCeVN0YXR1cyBzdGF0dXMgPSBQdXRCeVN0YXR1czo6Y29t
cHV0ZUZvcigKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1h
bnRpYyksCiAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUudG9TdHJ1Y3R1cmVTZXQo
KSwKLSAgICAgICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS51aWQoKSwKKyAgICAg
ICAgICAgIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKSwKICAgICAgICAgICAgIGlzRGlyZWN0
LCBwcml2YXRlRmllbGRQdXRLaW5kKTsKIAogICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgp
KQpAQCAtMTQyNCw4ICsxNDIyLDggQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgewogCiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAg
ICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwotICAgICAgICBmb3IgKGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAg
ICAgICBmb3IgKGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52YXJpYW50cygp
KSB7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uIDogdmFyaWFudC5jb25kaXRpb25TZXQoKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC53YXRjaENvbmRpdGlvbihjb25kaXRpb24pKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDQ4LDcgKzE0NDYsNyBAQCBjbGFzcyBDb25z
dGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNp
dGlvbigpKSwgbmV3U3RydWN0dXJlKSk7CiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChuZXdT
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeVZhcmlhbnQ6OlJlcGxhY2UpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVChwcml2YXRlRmllbGRQdXRLaW5kLmlzTm9uZSgpIHx8IHByaXZh
dGVGaWVsZFB1dEtpbmQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBub2RlLCB2YXJpYW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgbmV3U2V0Lm1lcmdlKCptX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpKSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0
aGlzLgogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4s
Ci0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFk
ZFB1dEJ5SWRTdGF0dXMobm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEZpbHRlclB1dEJ5U3RhdHVzLCBub2RlLT5vcmln
aW4sCisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZFB1dEJ5U3RhdHVzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAg
ICAgICBFZGdlKGJhc2VOb2RlKSk7CiAKICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodWlkKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA2MGZiYjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUz
YzM3ZTE4ZjFlLi5lNjQ4MTY3YzExODZiYzhjOTNmMzJlOGM1NGJlNzUxODMwZWYxMTM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAg
Ym9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdl
dEJ5U3RhdHVzOgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBhYTQ5
NjRlOWE1Y2YyZDU2YzY0ODNkMjJhYmJhNjY3MmFjNzM4NTA5Li5lMjViMWYzODU0OTM1NGFlMTMy
YWRkYmNiNjhhY2I5ZGE4MGI1Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKQEAgLTEyMzYsNiArMTIzNiwxMCBAQCBjbGFzcyBGaXh1cFBoYXNlIDog
cHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNl
PihjaGlsZDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fc2xvd1B1dEJ5VmFs
LmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxV
c2U+KGNoaWxkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
ICAgICAgICAgICAgIC8vIER1ZSB0byByZWdpc3RlciBwcmVzc3VyZSBvbiAzMi1iaXQsIHdlIHNw
ZWN1bGF0ZSBjZWxsIGFuZApAQCAtMjg2NSw3ICsyODY5LDcgQEAgY2xhc3MgRml4dXBQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgIGNhc2UgQ1BVSW50cmluc2ljOgogICAgICAgICBjYXNl
IEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgot
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyUHV0
QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYTg0MDY4
ZTc3NDZjOWRjNDM5NDFlNTFjOGUzMTVkYTczNWRmZTBmMy4uMGFhODBmZjA2MWE5NmIwZDUzNWQ2
MDhmMGE5NTA4NzYzOGY4NmRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKQEAgLTM4NSw4ICszODUsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICpub2RlLT5nZXRCeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFz
SW5CeVN0YXR1cygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5pbkJ5U3RhdHVz
KCkpOwotICAgIGlmIChub2RlLT5oYXNQdXRCeUlkU3RhdHVzKCkpCi0gICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPnB1dEJ5SWRTdGF0dXMoKSk7CisgICAgaWYgKG5vZGUtPmhhc1B1dEJ5
U3RhdHVzKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPnB1dEJ5U3RhdHVzKCkp
OwogICAgIGlmIChub2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRh
KCkudG9SYXcoKSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCmluZGV4IDYyYTFmZWYzZGMyY2RkZTEwOTE1MjRkNjczNDA4NDBmZDNmMjYw
YjEuLjFiZWM4ZGVlZDlkYmRiYTUwN2Q5YTNmYjFiMDM5ZTI2ZWUxYWRkNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTEyMDIsNiArMTIwMiw3IEBAIGNsYXNzIEdyYXBo
IGZpbmFsIDogcHVibGljIHZpcnR1YWwgU2Nhbm5hYmxlIHsKICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN5bWJvbFN0cnVjdHVyZTsKIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd0dldEJ5VmFs
OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fc2xvd1B1dEJ5VmFsOwogCiBwcml2YXRlOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQgdmlzaXRDaGlsZHJlbkltcGwoVmlzaXRvciYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA5
MTBjZjEzOTlmYzZjOWRiMWE3YzU0NGZhMWNhOThiZDIzY2IzYzY5Li4xMmYyOWYxMDcxNThhZmIw
MGM2NThhNmRmNDM5YTc5MTg0MmU4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2dldEJ5SWRzV2l0aFRoaXMsIGxpbmtCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fZ2V0QnlWYWxzLCBsaW5rQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1
dEJ5SWRzLCBsaW5rQnVmZmVyKTsKKyAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFs
cywgbGlua0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgbGlu
a0J1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIGxpbmtCdWZm
ZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgbGlua0J1ZmZlcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggOTZiZmM1YTMw
MzlhMzYwZmQxMGFhNDA5NGY1NzA2MGE3Y2RhOWE5Mi4uMzYxNzQ3NzgxZmNkNmU3OTE1ZTdhMjU5
Njg0NjVkMDdiNjkxYjI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaApAQCAtMTk5LDYgKzE5OSwxMSBAQCBjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBD
Q2FsbEhlbHBlcnMgewogICAgICAgICBtX3B1dEJ5SWRzLmFwcGVuZChJbmxpbmVDYWNoZVdyYXBw
ZXI8SklUUHV0QnlJZEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwogICAgIH0KIAorICAgIHZv
aWQgYWRkUHV0QnlWYWwoY29uc3QgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiwgU2xvd1BhdGhH
ZW5lcmF0b3IqIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKElu
bGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeVZhbEdlbmVyYXRvcj4oZ2VuLCBzbG93UGF0aCkpOwor
ICAgIH0KKwogICAgIHZvaWQgYWRkRGVsQnlJZChjb25zdCBKSVREZWxCeUlkR2VuZXJhdG9yJiBn
ZW4sIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1fZGVsQnlJ
ZHMuYXBwZW5kKElubGluZUNhY2hlV3JhcHBlcjxKSVREZWxCeUlkR2VuZXJhdG9yPihnZW4sIHNs
b3dQYXRoKSk7CkBAIC0zNjAsNiArMzY1LDcgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMg
Q0NhbGxIZWxwZXJzIHsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICBWZWN0b3I8SW5s
aW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9nZXRCeVZhbHM7CiAg
ICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRQdXRCeUlkR2VuZXJhdG9yPiwgND4gbV9w
dXRCeUlkczsKKyAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVFB1dEJ5VmFsR2VuZXJh
dG9yPiwgND4gbV9wdXRCeVZhbHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRE
ZWxCeUlkR2VuZXJhdG9yPiwgND4gbV9kZWxCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVX
cmFwcGVyPEpJVERlbEJ5VmFsR2VuZXJhdG9yPiwgND4gbV9kZWxCeVZhbHM7CiAgICAgVmVjdG9y
PElubGluZUNhY2hlV3JhcHBlcjxKSVRJbkJ5SWRHZW5lcmF0b3I+LCA0PiBtX2luQnlJZHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCBlYzVhOGZiNmVhY2Uy
OWQzNWVkMDU3Y2Q2NGYwZDZmNDY0NjY0ZDBmLi4yYmQ0YWU0NTM1MDRjZDZiNzhkOGQ5MWUyNDli
MjBmYTczMGMzYzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAK
QEAgLTEwNiw3ICsxMDYsNyBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0
QnV0dGVyZmx5OgogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtTdGF0dXM6CiAgICAgY2FzZSBGaWx0
ZXJHZXRCeVN0YXR1czoKLSAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgY2FzZSBG
aWx0ZXJQdXRCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CiAgICAgY2FzZSBG
aWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3Rh
dHVzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBhYzJiNGI1ZjAyODM5Yzhh
YmFhMWQzOWIzNTFkMjc3YTE5YmQxYzlhLi43Y2FhMjAyMDEyZGNhNThiZGI5ODY5NTg2NDQ2YTI0
OGE1OGUzM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTUsNyArNTUs
NyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9w
ZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgotI2luY2x1ZGUgIlB1
dEJ5SWRWYXJpYW50LmgiCisjaW5jbHVkZSAiUHV0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiU2V0
UHJpdmF0ZUJyYW5kVmFyaWFudC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5j
bHVkZSAiVHlwZUxvY2F0aW9uLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0cnVjdCBTdG9yYWdlQWNj
ZXNzRGF0YSB7CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlcjsKLSAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRz
OworICAgIFZlY3RvcjxQdXRCeVZhcmlhbnQsIDI+IHZhcmlhbnRzOwogICAgIAogICAgIGJvb2wg
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkg
Y29uc3Q7CkBAIC0zMjEwLDE1ICszMjEwLDE1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvLmFzPEluQnlTdGF0dXMqPigpOwogICAgIH0KICAgICAKLSAgICBib29sIGhh
c1B1dEJ5SWRTdGF0dXMoKQorICAgIGJvb2wgaGFzUHV0QnlTdGF0dXMoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gRmlsdGVyUHV0QnlJZFN0YXR1czsKKyAgICAgICAgcmV0dXJuIG9w
KCkgPT0gRmlsdGVyUHV0QnlTdGF0dXM7CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMq
IHB1dEJ5SWRTdGF0dXMoKQorICAgIFB1dEJ5U3RhdHVzKiBwdXRCeVN0YXR1cygpCiAgICAgewot
ICAgICAgICBBU1NFUlQoaGFzUHV0QnlJZFN0YXR1cygpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvLmFzPFB1dEJ5SWRTdGF0dXMqPigpOworICAgICAgICBBU1NFUlQoaGFzUHV0QnlTdGF0dXMo
KSk7CisgICAgICAgIHJldHVybiBtX29wSW5mby5hczxQdXRCeVN0YXR1cyo+KCk7CiAgICAgfQog
CiAgICAgYm9vbCBoYXNEZWxldGVCeVN0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKaW5kZXggZTc1YmNmZThhMWFjMzcxYTAyZTU2NTQ5NmI5ODc4ZDk4N2VlNGFk
MC4uOWE5MGE0Y2ZkYWM4ZjIzNTE4Mjg3MjI0ZWRiZWU1ZmQ4OWY2NDNkZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtNTQ2LDcgKzU0Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGaWx0ZXJDYWxsTGlua1N0YXR1cywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZpbHRlckdldEJ5U3RhdHVzLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oRmlsdGVySW5CeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0
ZSkgXAotICAgIG1hY3JvKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhGaWx0ZXJQdXRCeVN0YXR1cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZpbHRlckRlbGV0ZUJ5U3RhdHVzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
RmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhGaWx0ZXJTZXRQcml2YXRlQnJhbmRTdGF0dXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAppbmRleCBiMWNmZWU4YWNlYzM4Y2MwNWE0MTZlYWJlYmI5ZTIyMjM1ZTE3ZThiLi4y
ODk3Mzc4YmY5ODU4YjFjNGNmYTZhMzExMDI4Y2JhMGNiZWRkZjY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBA
IC0yMTUsMjEgKzIxNSw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAKICAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29k
ZUlEKCkgPT0gb3BfcHV0X2J5X3ZhbCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNvbXBpbGUg
b3BfcHV0X2J5X3ZhbCBhcyBQdXRCeUlkIGFuZCBpbmxpbmVzIFNldHRlckNhbGwgb25seSB3aGVu
IHdlIGZvdW5kIFN0cnVjdHVyZVN0dWJJbmZvIGZvciB0aGlzIG9wX3B1dF9ieV92YWwuCi0gICAg
ICAgICAgICAgICAgLy8gQnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgY2Fubm90IGZp
bmQgU3RydWN0dXJlU3R1YkluZm8gaGVyZS4gTGV0J3MgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBz
Y2VuYXJpby4KLSAgICAgICAgICAgICAgICAvLyAxLiBCYXNlbGluZSBDb2RlQmxvY2sgKEEpIGlz
IGNvbXBpbGVkLgotICAgICAgICAgICAgICAgIC8vIDIuIChBKSBnZXRzIERGRyAoQikuCi0gICAg
ICAgICAgICAgICAgLy8gMy4gU2luY2UgKEEpIGNvbGxlY3RzIGVub3VnaCBpbmZvcm1hdGlvbiBm
b3IgcHV0X2J5X3ZhbCwgKEIpIGNhbiBnZXQgU3RydWN0dXJlU3R1YkluZm8gZnJvbSAoQSkgYW5k
IGNvcG1pbGUgaXQgYXMgaW5saW5lZCBTZXR0ZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyA0
LiAoQSkncyBKSVREYXRhIGlzIGRlc3Ryb3llZCBzaW5jZSBpdCBpcyBub3QgZXhlY3V0ZWQuIFRo
ZW4sIChBKSBiZWNvbWVzIExMSW50LgotICAgICAgICAgICAgICAgIC8vIDUuIFRoZSBDb2RlQmxv
Y2sgaW5saW5pbmcgKEEpIGdldHMgT1NSIGV4aXQuIFNvIChBKSBpcyBleGVjdXRlZCBhbmQgKEEp
IGV2ZW50dWFsbHkgZ2V0cyBCYXNlbGluZSBDb2RlQmxvY2sgYWdhaW4uCi0gICAgICAgICAgICAg
ICAgLy8gNi4gKEIpIGdldHMgT1NSIGV4aXQuIChCKSBhdHRlbXB0cyB0byBzZWFyY2ggZm9yIFN0
cnVjdHVyZVN0dWJJbmZvIGluIChBKSBmb3IgUHV0QnlJZCAob3JpZ2luYWxseSwgcHV0X2J5X3Zh
bCkuIEJ1dCBpdCBkb2VzIG5vdCBleGlzdCBzaW5jZSAoQSkncyBKSVREYXRhIGlzIGNsZWFyZWQg
b25jZS4KLSAgICAgICAgICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyLT5maW5kQnlWYWxJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChieVZhbEluZm8pOwotICAgICAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBieVZhbEluZm8tPmRvbmVUYXJnZXQucmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CiAgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gc3R1YkluZm8tPmRvbmVMb2NhdGlvbi5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggNjY3ODM1NTVkZjIxNmQxOGY5MGM1OTU0
NmVjNzkyZDUwZDhmZDU4YS4uMWY0MTgzMThhNGMwZGVjNmQyZTk5ZDQwOWY3MWRhZmE0Njk3YjJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBjbGFz
cyBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAg
ICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBGaWx0
ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTI1NTQsMTUgKzI1NTQsMTMgQEAgY2xhc3Mg
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBh
cHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGlu
Y29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5VmFyaWFu
dDo6cmVwbGFjZShudWxscHRyLCBjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVu
dE9mZnNldCkpOworICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeVZh
cmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApAQCAtMjYx
NSw3ICsyNjEzLDcgQEAgY2xhc3MgT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0
YXR1czoKKyAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgICAgICBjYXNlIEZpbHRl
ckRlbGV0ZUJ5U3RhdHVzOgogICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRl
QnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDE2MjJkZDhiMWI1MjFjYzQx
ZGZhODVhYjUzMjYyZWNlODBmZTc0ZjIuLjg5ZTVlZjRkODUxZWM5MGQ2ZDk4NTVjYTQ3Y2E1YmM3
ODI1NzJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xNDQ5LDcgKzE0NDksNyBAQCBj
bGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
IGNhc2UgV2Vha01hcFNldDoKICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKLSAgICAgICAgY2FzZSBGaWx0ZXJQdXRCeUlk
U3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICBjYXNlIEZp
bHRlckluQnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAgICAg
ICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDFlMDQ0Y2Y5ZGIxYzYyYTdhOTcw
MGU0MTVjYjczMDRiOWM5YTVhMjAuLmQ1NDk2NDQ1MGI2MzIyNzQ4OThkNjhjOGE5YmU5ZjdhNzZm
OTgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBl
JiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgCiAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApp
bmRleCAzZTMyNDdmOGM2OTI2ZDI5N2I2Y2EyY2YxNGUyZDZiNWQ5OTNlYjZiLi4wYmVmZWRhYzQ5
Y2YwYjVkZWVjNTU2ODFjY2EwMGI1YWQ2YzNhY2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTI2OTAsMzUgKzI2
OTAsODIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFB1dEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxE
aXJlY3QpOwotCi0gICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5nKG5vZGUs
IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwotICAgICAgICAgICAgICAgICAgICBhbHJlYWR5SGFu
ZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcobm9kZSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJvbFVz
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhT
eW1ib2wobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChub2RlLCBjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzKTsKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOyAvLyBTYXZl
IGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOworICAg
ICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKwor
ICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpCisgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3RyaWN0LCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3Mp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncyk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOworICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOyAvLyBTYXZlIGEgcmVnaXN0ZXIs
IHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KLSAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGNo
aWxkMSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMywgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5q
c1ZhbHVlUmVncygpOwogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJv
cGVydHkuanNWYWx1ZVJlZ3MoKTsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9
IHZhbHVlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkK
LSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IHByb3BlcnR5UmVncywgdmFsdWVSZWdzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsQ2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdCwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncywgdmFsdWVSZWdz
KTsKLSAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAKKwor
ICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGNoaWxkMSk7CisgICAgICAgICAgICBzcGVjdWxh
dGUobm9kZSwgY2hpbGQyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBjaGlsZDMpOwor
CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50
aWM7CisgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2Fs
bFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmln
aW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Qg
PSBub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0OworICAgICAgICAgICAgRUNNQU1vZGUgZWNt
YU1vZGUgPSBub2RlLT5lY21hTW9kZSgpOworCisgICAgICAgICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRG
R0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVn
aXN0ZXJzLAorICAgICAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVn
cywgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CisKKyAgICAgICAgICAgIGlmIChtX3N0
YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxz
ZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkMikuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAg
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAg
ICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkMikuaXNUeXBlKFNwZWNTeW1i
b2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKKworICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgICAgICAgICAgYXV0byBv
cGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAg
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygp
LCBudWxscHRyKTsKKworICAgICAgICAgICAgbV9qaXQuYWRkUHV0QnlWYWwoZ2VuLCBzbG93UGF0
aC5nZXQoKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQ
YXRoKSk7CisKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgYWxyZWFk
eUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MzIyLDcgKzQzNjksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEZp
bHRlckNhbGxMaW5rU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgY2Fz
ZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAg
Y2FzZSBGaWx0ZXJJbkJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDg4MDhiMTBjODI2
YzUxMDY5Nzk3NDAwOWU5NmYxOTlmYThmMTBhNGMuLmQ0NTVjYTRlNjhlNDcwYmQ0Yjk2YmUwYWUx
YTkwMjlkN2JlYWNlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMzE3NywzNCArMzE3Nyw5NCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2
NEFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CiAgICAgICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9k
ZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCwgbm9kZS0+b3AoKSk7Ci0KLSAgICAgICAgICAgIGlm
IChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcobm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7
Ci0gICAgICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dQdXRCeVZhbC5j
b250YWlucyhub2RlKSB8fCAoY2hpbGQxLnVzZUtpbmQoKSAhPSBDZWxsVXNlICYmIGNoaWxkMS51
c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZDEu
dXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChub2RlLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlI
YW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGNo
aWxkMi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMp
OwotICAgICAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIGNoaWxkMSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnMih0aGlzLCBjaGlsZDIpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzModGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFy
ZzEuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0KQorICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUt
PmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0IDog
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIp
OworICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAg
ICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgY2hpbGQxKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgY2hpbGQyKTsKLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzModGhpcywgY2hpbGQzKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmcxR1BS
ID0gYXJnMS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsK
LSAgICAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKLSAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERp
cmVjdCkKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3ROb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBh
cmcyR1BSLCBhcmczR1BSKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG5vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKLSAgICAgICAgICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
cHJvcGVydHkodGhpcywgY2hpbGQyLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0dWJJbmZvOworICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklU
KSkgeworICAgICAgICAgICAgICAgIHN0dWJJbmZvID0gR1BSVGVtcG9yYXJ5KHRoaXMpOworICAg
ICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBjaGlsZDIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlKG5vZGUsIGNoaWxkMyk7CisKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworICAg
ICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3Q7Cisg
ICAgICAgICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IG5vZGUtPmVjbWFNb2RlKCk7CisKKyAgICAg
ICAgICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgICAgIGlmIChtX3N0
YXRlLmZvck5vZGUoY2hpbGQyKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgZWxz
ZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkMikuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAg
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAg
ICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkMikuaXNUeXBlKFNwZWNTeW1i
b2wpKQorICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKKworICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgICAgICAgICBhdXRv
IG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKKyAg
ICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKGNvZGVPcmlnaW4pKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBzdHViSW5m
b0dQUiwgbnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNs
b3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmln
aW4pKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgbnVs
bHB0cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faml0LmFkZFB1dEJ5VmFsKGdl
biwgc2xvd1BhdGguZ2V0KCkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RG
TW92ZShzbG93UGF0aCkpOworCiAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
ICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTg3MSw3
ICs1OTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAg
ICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVz
OgotICAgIGNhc2UgRmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3Rh
dHVzOgogICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5
U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuY3BwCmluZGV4IGI5MDY2NWVjY2U1MmM1N2Y0NGI3MGQ0NjdjNGE0ZTVhNWYzNzAy
ZTAuLjk3YmI2ZTA4Njk5MzUyM2MyOWUxZTExMGEyMDQzODAyOWEwZDI3ZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuY3BwCkBAIC0yMzMsNiArMjMzLDE1IEBAIGNsYXNzIFN0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6Qmln
SW50NjRBcnJheToKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheTog
eworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMik7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5t
X3Nsb3dQdXRCeVZhbC5jb250YWlucyhtX25vZGUpICYmIChjaGlsZDEudXNlS2luZCgpID09IENl
bGxVc2UgfHwgY2hpbGQxLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc2lkZXJCYXJyaWVyKGNoaWxkMSwgY2hpbGQzKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggNTQxMGQ5MDg5
NmRjNGYwMTA1NzkzMGRmODJmNjYxOTJiODFmNmMwZi4uYzVlNWNmMzZhNzcwZDE1ODNiNjkzZGZk
ODgxZDY0MjRhYjE3YmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKQEAgLTMxMiw4ICszMTIsOCBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERh
dGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFB1dEJ5VmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgIT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCAhdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmRmZ1Nob3VsZFdhdGNoKCkp
OwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCBmZGE2NGQzNWRhMzQy
ODg5Yzc5OGMwNTFlOTU3NmU4YTFlMzNhMzliLi5mMWEzODA5ZDdlZmUzMGY4ZDU5YmEyMWZhY2Qw
NzA5ZTQzOGI5MDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTE5Niw3ICsxOTYsNyBAQCBjbGFzcyBW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAg
ICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRl
clB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAg
ICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVy
RGVsZXRlQnlTdGF0dXM6CkBAIC00MjEsNyArNDIxLDcgQEAgY2xhc3MgVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNh
c2UgRmlsdGVyR2V0QnlTdGF0dXM6Ci0gICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0
dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0YXR1
czoKICAgICAgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggMDNmODY1MmM2Y2I4MmM2
MjAyMGQxZTY2YmI1OWY0NjU5MWQ4M2U0Yy4uODNiNTFiYTljZjc2NWRhMDQ2MzczYTc5YjFjYTAz
MzBjNDNjN2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcApAQCAtNDA3LDcgKzQwNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgTWF0Y2hTdHJ1Y3R1cmU6CiAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKICAgICBjYXNlIEZpbHRlckdldEJ5U3RhdHVzOgotICAgIGNhc2Ug
RmlsdGVyUHV0QnlJZFN0YXR1czoKKyAgICBjYXNlIEZpbHRlclB1dEJ5U3RhdHVzOgogICAgIGNh
c2UgRmlsdGVySW5CeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAg
IGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNWEzZTk4Zjc1MzcwMWQzYjM0Zjg0
Yjk4MDgzZDI0ZGFlOGVmNzEwMC4uMWIwZWYzOWM1NTExMjE4MjU5NTk3NjhmMTQ5ZGYwZDg2Zjlm
YWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cApAQCAtMTY0OSw3ICsxNjQ5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlckNhbGxMaW5rU3RhdHVzOgogICAgICAgICBjYXNl
IEZpbHRlckdldEJ5U3RhdHVzOgotICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6Cisg
ICAgICAgIGNhc2UgRmlsdGVyUHV0QnlTdGF0dXM6CiAgICAgICAgIGNhc2UgRmlsdGVySW5CeVN0
YXR1czoKICAgICAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICAgICAgY2FzZSBG
aWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKQEAgLTU1NTYsNTcgKzU1NTYsMTU1IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOiB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
Ci0gICAgICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25fR0NDSiBvcGVyYXRpb24gPSBudWxscHRy
OwotICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0Q2VsbFN0cmluZ05vblN0cmljdDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJp
Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbENlbGxTdHJpbmdTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsU3RyaW5nTm9uU3RyaWN0OworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93UHV0QnlW
YWwuY29udGFpbnMobV9ub2RlKSB8fCAoY2hpbGQxLnVzZUtpbmQoKSAhPSBDZWxsVXNlICYmIGNo
aWxkMS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSkgeworICAgICAgICAgICAgICAgIGlmIChj
aGlsZDEudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgVl9KSVRP
cGVyYXRpb25fR0NDSiBvcGVyYXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGly
ZWN0Q2VsbFN0cmluZ1N0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0Q2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUo
KS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdTdHJpY3Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdOb25TdHJpY3Q7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9u
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N0cmluZyhj
aGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZtQ2FsbChW
b2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQx
KSwgbG93U3RyaW5nKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0
cmljdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25T
dHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0
OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+ZWNtYU1vZGUoKS5p
c1N0cmljdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xTdHJpY3Q7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3Q7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdm1D
YWxsKFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChj
aGlsZDEpLCBsb3dTeW1ib2woY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxk
MykpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HSkpKIG9wZXJhdGlvbjsK
LSAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0OwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3QoKSkKLSAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Q7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9HSkpKIG9wZXJh
dGlvbjsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmVjbWFNb2RlKCkuaXNTdHJpY3Qo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0U3RyaWN0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5l
Y21hTW9kZSgpLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3Q7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdm1DYWxsKAorICAgICAg
ICAgICAgICAgICAgICBWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
CisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGls
ZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZtQ2FsbCgKLSAgICAgICAg
ICAgICAgICBWb2lkLCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAg
ICAgICAgICAgICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dKU1ZhbHVlKGNoaWxkMiksIGxvd0pT
VmFsdWUoY2hpbGQzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisKKyAg
ICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChjaGlsZDEpOworICAgICAgICAgICAgTFZh
bHVlIHByb3BlcnR5ID0gbG93SlNWYWx1ZShjaGlsZDIsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxkMywgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKGNoaWxkMik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoY2hpbGQzKTsKKyAgICAgICAgICAgIGJvb2wgcHJvcGVydHlJ
c1N0cmluZyA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBwcm9wZXJ0eUlzSW50MzIgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJvb2wgcHJvcGVydHlJc1N5bWJvbCA9IGZhbHNlOworICAgICAgICAg
ICAgaWYgKGFic3RyYWN0VmFsdWUoY2hpbGQyKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAg
ICAgICAgICAgcHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChh
YnN0cmFjdFZhbHVlKGNoaWxkMikuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
ICAgIHByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChhYnN0cmFj
dFZhbHVlKGNoaWxkMikuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgICAgIHByb3Bl
cnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2UpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
U29tZVJlZ2lzdGVyKHByb3BlcnR5KTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNv
bWVSZWdpc3Rlcih2YWx1ZSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV9ub3RD
ZWxsTWFzaywgVmFsdWVSZXA6OmxhdGVSZWcoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcikp
OworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fbnVtYmVyVGFnLCBWYWx1ZVJlcDo6
bGF0ZVJlZyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikpOworICAgICAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyAxIDogMDsKKworICAgICAgICAgICAgUmVmUHRyPFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBv
aW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKworICAgICAgICAgICAgU3RhdGUqIHN0YXRl
ID0gJm1fZnRsU3RhdGU7CisgICAgICAgICAgICBDb2RlT3JpZ2luIG5vZGVTZW1hbnRpY09yaWdp
biA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gbV9ub2RlLT5lY21hTW9kZSgpOworICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG1fbm9k
ZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdDsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uY29kZU9yaWdpbnMtPmFk
ZFVuaXF1ZUNhbGxTaXRlSW5kZXgobm9kZVNlbWFudGljT3JpZ2luKTsKKworICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGRpcmVjdCBleGl0IHRhcmdldCBmb3Igb3BlcmF0aW9uIGNhbGxz
LgorICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25z
ID0gZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhq
aXQpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydz
IGNyZWF0ZWQgYnkgdGhlIElDIGZvciBnZXR0ZXJzLiBXZSBkb24ndCBoYXZlCisgICAgICAgICAg
ICAgICAgLy8gdG8gZG8gYW55dGhpbmcgd2VpcmQgb3RoZXIgdGhhbiBjYWxsIHRoaXMsIHNpbmNl
IGl0IHdpbGwgYXNzb2NpYXRlIHRoZSBleGl0IHdpdGgKKyAgICAgICAgICAgICAgICAvLyB0aGUg
Y2FsbHNpdGUgaW5kZXguCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVs
ZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOworCisgICAgICAg
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHBhcmFtc1syXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBh
cmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAgICAgICAgYXV0
byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50
aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJ
bnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSBwcm9wZXJ0eUlzU3RyaW5nOworICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gcHJvcGVy
dHlJc0ludDMyOworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHByb3BlcnR5SXNTeW1ib2w7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRM
YXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXAoKS5saW5rKCZq
aXQpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVn
aW4gPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHNsb3dQYXRoQ2FsbDsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBvcGVyYXRpb24gPSBpc0Rp
cmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDog
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRv
ci0+c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci0+c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOworICAgICAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIEludmFsaWRHUFJSZWcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
R1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uLCBJbnZhbGlkR1BSUmVnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2Vu
ZXJhdG9yLT5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KS5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaml0
Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLT5yZXBvcnRTbG93UGF0aENhbGwoc2xvd1BhdGhCZWdpbiwgc2xvd1BhdGhDYWxsKTsKKwor
ICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmZpbmFsaXplKGxp
bmtCdWZmZXIsIGxpbmtCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTg5NTEsNyArOTA0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICBQdXRCeVZhcmlhbnQgdmFyaWFu
dCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpLnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpW2pdKTsKICAgICAgICAgICAgICAgICBiYXNlU2V0LmFkZChzdHJ1
Y3R1cmUpOwpAQCAtODk2NiwxNiArOTA2NCwxNiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMu
c2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
IFB1dEJ5VmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKIAogICAgICAgICAgICAg
TFZhbHVlIHN0b3JhZ2U7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeVZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNl
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1f
b3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwg
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24sIHZhcmlhbnQua2lu
ZCgpKTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7CiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkoCiAg
ICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAog
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC04OTg3LDcgKzkwODUsNyBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVl
LCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eVZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZs
YWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmlu
ZGV4IDY5N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQwOWY0ZjUxOWIwNjguLjc4ZmQ0OTQzZjll
Y2JjNGMzNWM3Y2RjYjMyYjczNzdjYWI5ZjFlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0b3IvRFNMLnJiCkBAIC0xNDEsNyArMTQxLDcgQEAgZGVmIHNlbGYud3JpdGVfYnl0ZWNvZGVf
c3RydWN0cyhieXRlY29kZV9saXN0LCBieXRlY29kZV9zdHJ1Y3RzX2ZpbGVuYW1lKQogI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2lu
Y2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgi
CisjaW5jbHVkZSAiUHV0QnlTdGF0dXMuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNp
bmNsdWRlICJUb1RoaXNTdGF0dXMuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaApp
bmRleCBmMDRjMWY0MjhlMTBiZmM3MWZhNWNlMzVlMDAyODY4YmI3OGFkZWY2Li45MWIzYjMxNTUx
MGRhNjgyNGIzYzk2MzQxMGUzMzZkOTU4OWFiYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lD
U3RhdHMuaApAQCAtNjcsMTAgKzY3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKE9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpIFwKICAgICBtYWNybyhPcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkRmllbGRTdHJpY3RPcHRpbWl6ZSkgXAogICAgIG1hY3Jv
KE9wZXJhdGlvblB1dEJ5SWRQdXRQcml2YXRlRmllbGRGaWVsZFN0cmljdE9wdGltaXplKSBcCi0g
ICAgbWFjcm8oUHV0QnlJZEFkZEFjY2Vzc0Nhc2UpIFwKLSAgICBtYWNybyhQdXRCeUlkUmVwbGFj
ZVdpdGhKdW1wKSBcCi0gICAgbWFjcm8oUHV0QnlJZFNlbGZQYXRjaCkgXAotICAgIG1hY3JvKElu
QnlJZFNlbGZQYXRjaCkgXAorICAgIG1hY3JvKFB1dEJ5QWRkQWNjZXNzQ2FzZSkgXAorICAgIG1h
Y3JvKFB1dEJ5UmVwbGFjZVdpdGhKdW1wKSBcCisgICAgbWFjcm8oUHV0QnlTZWxmUGF0Y2gpIFwK
KyAgICBtYWNybyhJbkJ5U2VsZlBhdGNoKSBcCiAgICAgbWFjcm8oRGVsQnlSZXBsYWNlV2l0aEp1
bXApIFwKICAgICBtYWNybyhEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYykgXAogICAgIG1hY3JvKE9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAppbmRleCBjOWIwMWMwZDA1YTVkNmYwYzExZDBhMzczODFjMmQ5OGVmYTQ3MTMyLi41MGRlODU1
YjZhYzkwZWU2ZDNkMWM5NjFlNDQ4NDgyMzk1YTQ2MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCkBAIC01MTAsNiArNTEwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICAgICBtX2dldEJ5VmFsSW5kZXggPSAwOwogICAgIG1fZ2V0QnlJZFdpdGhUaGlzSW5k
ZXggPSAwOwogICAgIG1fcHV0QnlJZEluZGV4ID0gMDsKKyAgICBtX3B1dEJ5VmFsSW5kZXggPSAw
OwogICAgIG1faW5CeUlkSW5kZXggPSAwOwogICAgIG1faW5CeVZhbEluZGV4ID0gMDsKICAgICBt
X2RlbEJ5SWRJbmRleCA9IDA7CkBAIC02NjIsNiArNjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICBSRUxFQVNFX0FTU0VSVChtX2dldEJ5SWRJbmRleCA9PSBt
X2dldEJ5SWRzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9nZXRCeUlkV2l0aFRoaXNJ
bmRleCA9PSBtX2dldEJ5SWRzV2l0aFRoaXMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCht
X3B1dEJ5SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9wdXRCeVZhbEluZGV4ID09IG1fcHV0QnlWYWxzLnNpemUoKSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9pbkJ5SWRJbmRleCA9PSBtX2luQnlJZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VChtX2luc3RhbmNlT2ZJbmRleCA9PSBtX2luc3RhbmNlT2ZzLnNpemUoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCA9PSBtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzLnNpemUoKSk7CkBAIC05MDksNiArOTExLDcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOworICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA2YzRm
MTFmNjhlOTAzZWJhNjdjNmQ3ZWE5Mzg3ZDgxYjQ1NmFlMGY1Li42YzM0YWM2NzNhMjgyYzg4YmEx
ZWJjZmM0YWNlMTg1NWZhMDIzODAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTIyNSwy
OCArMjI1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpJVCBqaXQodm0s
IGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZv
LT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8
T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQ
dXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5k
ZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgSklUIGppdCh2bSwg
Y29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICB9Ci0KICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dFByaXZh
dGVOYW1lV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOwpAQCAtMjY3LDE2ICsyNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBsaW5rKCk7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxl
KEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2lu
ZCwgQ2FjaGVhYmxlSWRlbnRpZmllcik7Ci0KICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1
dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIENh
Y2hlYWJsZUlkZW50aWZpZXIpOwogCi0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7Ci0KICAgICAgICAg
Ly8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hl
Y2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CkBAIC0zODIsMzggKzM1Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShP
cCBieXRlY29kZSk7CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpOworICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxD
YXNlKEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJv
dW5kc1NwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwotICAgICAgICAKLSAgICAgICAgSklUQXJy
YXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlu
cyBpbmRlY2luZyB0eXBlLgotICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHll
dCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAotICAgICAgICAvLyB6ZXJvLWV4
dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmls
ZWQuCi0gICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCi0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJQdXRCeVZhbChPcCBieXRl
Y29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChi
eXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJbmZvLCBJbnQzMlNoYXBlKTsKLSAgICAgICAgfQotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZVB1
dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRHZW5lcmljQ29udGln
dW91c1B1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8sIERvdWJsZVNoYXBlKTsK
LSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgSnVtcExp
c3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSwgYnlWYWxJ
bmZvKTsKLSAgICAgICAgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
SnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AsIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEJ5VmFsSW5mbyosIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gQ29udGln
dW91c1NoYXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIEp1bXBM
aXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
QnlWYWxJbmZvKik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBKdW1w
TGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9wLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBCeVZhbEluZm8qLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyosIFR5cGVkQXJyYXlUeXBlKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtMTA2NCw2ICsxMDA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxK
SVRHZXRCeVZhbEdlbmVyYXRvcj4gbV9nZXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3I+IG1fZ2V0QnlJZHNXaXRoVGhpczsKICAgICAgICAgVmVjdG9y
PEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fcHV0QnlJZHM7CisgICAgICAgIFZlY3RvcjxKSVRQdXRC
eVZhbEdlbmVyYXRvcj4gbV9wdXRCeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVRJbkJ5SWRHZW5l
cmF0b3I+IG1faW5CeUlkczsKICAgICAgICAgVmVjdG9yPEpJVEluQnlWYWxHZW5lcmF0b3I+IG1f
aW5CeVZhbHM7CiAgICAgICAgIFZlY3RvcjxKSVREZWxCeUlkR2VuZXJhdG9yPiBtX2RlbEJ5SWRz
OwpAQCAtMTA5MSw2ICsxMDMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVk
IG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJ
ZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX3B1dEJ5SWRJ
bmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHV0QnlWYWxJbmRleCB7IFVJ
TlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1faW5CeUlkSW5kZXggeyBVSU5UX01BWCB9Owog
ICAgICAgICB1bnNpZ25lZCBtX2luQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVu
c2lnbmVkIG1fZGVsQnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCmluZGV4IDY5YmYx
YTFjM2Y4YTFhMzkxNjljNmQzOTljMmIwYzY3NmM4OGNmNjQuLmE0YmI4ZjhiZGQwNzY4YmFjOTM5
YTgyN2Q1NmI2YjliMmQ0Y2Q1NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgSklU
UHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFi
bGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKICAgICBFQ01BTW9kZSBlY21hTW9k
ZSwgUHV0S2luZCBwdXRLaW5kKQotICAgICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2Nr
LCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0LCB1c2VkUmVn
aXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCisgICAgICAgIDogSklUQnlJZEdlbmVy
YXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBl
OjpQdXRCeUlkLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCiAgICAg
ICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAgICAgLCBtX3B1dEtpbmQocHV0S2luZCkK
IHsKQEAgLTM4MSw2ICszODEsNDMgQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxp
emUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQogICAgICAgICBt
X3N0dWJJbmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247
CiB9CiAKK0pJVFB1dEJ5VmFsR2VuZXJhdG9yOjpKSVRQdXRCeVZhbEdlbmVyYXRvcihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
cHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgYXJyYXlQcm9maWxlR1BSLCBHUFJS
ZWcgc3R1YkluZm9HUFIpCisgICAgOiBCYXNlKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdp
biwgY2FsbFNpdGVJbmRleCwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycykKKyAgICAsIG1fYmFz
ZShiYXNlKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBtX3N0dWJJbmZvLT5oYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKworICAgIG1fc3R1YkluZm8tPmJhc2VHUFIgPSBiYXNl
LnBheWxvYWRHUFIoKTsKKyAgICBtX3N0dWJJbmZvLT5yZWdzLnByb3BlcnR5R1BSID0gcHJvcGVy
dHkucGF5bG9hZEdQUigpOworICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gdmFsdWUucGF5bG9h
ZEdQUigpOworICAgIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIgPSBzdHViSW5mb0dQUjsKKyAg
ICBtX3N0dWJJbmZvLT5tX2FycmF5UHJvZmlsZUdQUiA9IGFycmF5UHJvZmlsZUdQUjsKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgIG1fc3R1YkluZm8tPmJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQ
UigpOworICAgIG1fc3R1YkluZm8tPnZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAg
bV9zdHViSW5mby0+di5wcm9wZXJ0eVRhZ0dQUiA9IHByb3BlcnR5LnRhZ0dQUigpOworI2VuZGlm
Cit9CisKK3ZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImIGppdCkKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
Uik7CisgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2xvd1BhdGhKdW1wID0g
aml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwordm9p
ZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGgsIExp
bmtCdWZmZXImIHNsb3dQYXRoKQoreworICAgIEJhc2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93
UGF0aCwgZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdGFydCkp
OworICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKKyAgICAgICAgbV9zdHVi
SW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOworfQor
CiBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OkpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgYnJhbmQsIEdQUlJlZyBzdHViSW5mb0dQUikKICAgICA6IEJhc2UoY29k
ZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBhY2Nlc3NUeXBlLCB1
c2VkUmVnaXN0ZXJzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCmluZGV4IGVlNjgxNDEwMWE4MWViZDE1NWJmNGRiNjkzZmY0
N2M4YTI3OGY3ZmIuLjM1YTc3ZjhlNzM5NmU0NjI3ZWNkNmUwOGM1MDQwY2QxNGZlNDU3NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgKQEAgLTEyOSw5ICsxMjksNyBAQCBjbGFzcyBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiAKIGNsYXNzIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUQnlJZEdlbmVyYXRvciB7CiBwdWJsaWM6Ci0gICAg
SklUUHV0QnlJZEdlbmVyYXRvcigpCi0gICAgICAgIDogbV9lY21hTW9kZShFQ01BTW9kZTo6c3Ry
aWN0KCkpCi0gICAgeyB9CisgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLApAQCAtMTQyLDEwICsxNDAs
MzcgQEAgY2xhc3MgSklUUHV0QnlJZEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRCeUlkR2Vu
ZXJhdG9yIHsKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsK
IAogcHJpdmF0ZToKLSAgICBFQ01BTW9kZSBtX2VjbWFNb2RlOworICAgIEVDTUFNb2RlIG1fZWNt
YU1vZGUgeyBFQ01BTW9kZTo6c3RyaWN0KCkgfTsKICAgICBQdXRLaW5kIG1fcHV0S2luZDsKIH07
CiAKK2NsYXNzIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yIHsKKyAgICB1c2luZyBCYXNlID0gSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I7
CitwdWJsaWM6CisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvcigKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5
LCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJlZyBhcnJheVByb2ZpbGVHUFIsIEdQUlJlZyBzdHVi
SW5mb0dQUik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aEp1bXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2xvd1BhdGhKdW1wLm1fanVtcC5pc1NldCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fc2xvd1BhdGhKdW1wLm1fanVtcDsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xv
d1BhdGhMaW5rQnVmZmVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOworCitwcml2YXRlOgorICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKKyAgICBKU1ZhbHVl
UmVncyBtX3ZhbHVlOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7Cit9OworCiBjbGFz
cyBKSVREZWxCeVZhbEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CiAgICAgdXNpbmcgQmFzZSA9IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOwogcHVibGlj
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCAxN2MyN2ZkYzFjZDNi
ZjYzMjZhNDNiNWZlZjgxZTYwZTZjYzQ3ZjAyLi42N2UwYjc4MzA5YTQzZjJiYmI5OWE5MWIzNjg5
YjkyN2IyNjJkYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAt
MzUyLDYgKzM1MiwxNCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZQogICAgIH0KIH0KIAoraW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQoreworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJy
YXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
KSk7CisgICAgfQorfQorCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRv
SG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewogICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTWF5U3RvcmVUb0hvbGUo
KSk7CkBAIC0zNjIsMjQgKzM3MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
ZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpCiAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZPdXRPZkJvdW5kcygp
KTsKIH0KIAotaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVBy
b2ZpbGUqIHByb2ZpbGUpCi17Ci0gICAgYXV0byBhcnJheVByb2ZpbGVTYXcgPSBbXSAoQXJyYXlN
b2RlcyBhcnJheU1vZGVzLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkgewotICAgICAgICByZXR1
cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25vcmluZ1R5cGVkQXJyYXlzKGFycmF5TW9kZXMsIGNhcGFi
aWxpdHkpOwotICAgIH07Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJs
b2NrLT5tX2xvY2spOwotICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2Nr
ZXIsIG1fY29kZUJsb2NrKTsKLSAgICBBcnJheU1vZGVzIGFycmF5TW9kZXMgPSBwcm9maWxlLT5v
YnNlcnZlZEFycmF5TW9kZXMobG9ja2VyKTsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5
TW9kZXMsIERvdWJsZVNoYXBlKSkKLSAgICAgICAgcmV0dXJuIEpJVERvdWJsZTsKLSAgICBpZiAo
YXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEludDMyU2hhcGUpKQotICAgICAgICByZXR1cm4g
SklUSW50MzI7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBBcnJheVN0b3Jh
Z2VTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7Ci0gICAgcmV0dXJuIEpJ
VENvbnRpZ3VvdXM7Ci19Ci0KIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAppbmRleCBkMjRkOWY1ZWRmODcxNTgzOGQ3NzViZWNjNzFmODE5MjRjYjkz
Yzk3Li43ZmQwNDYzMjgxZTM1ZGZlNTVmYWUyMDYxMDBhMTVkYTk3MTlhMjk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTcxOSw3ICs3MTksNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAo
c3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRl
bnRpZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRL
aW5kOjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8s
IFB1dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
dWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzUxLDcgKzc1MSw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRp
ZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5k
OjpOb3REaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudGlmaWVyLCBzbG90LCAqc3R1YkluZm8sIFB1
dEJ5S2luZDo6QnlJZCwgUHV0S2luZDo6Tm90RGlyZWN0KTsKIH0KIAogSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
dWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpKQpAQCAtNzgyLDcgKzc4Miw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emUsIHZvaWQsIChKU0dsb2JhbE9iCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R1
YkluZm8tPmNvbnNpZGVyQ2FjaGluZ0J5KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgaWRlbnRp
ZmllcikpCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0S2lu
ZDo6RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHViSW5mbywgUHV0
QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJlY3QpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCB1
aW50cHRyX3QgcmF3Q2FjaGVhYmxlSWRlbnRpZmllcikpCkBAIC04MTMsNyArODEzLDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHVi
SW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlm
aWVyKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRLaW5k
OjpEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRC
eUtpbmQ6OkJ5SWQsIFB1dEtpbmQ6OkRpcmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFB1
dFByaXZhdGVGaWVsZENhbGxiYWNrPgpAQCAtODg4LDcgKzg4OCw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emUsIHZvaWQsCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWNjZXNzVHlwZSwgYWNjZXNzVHlwZSA9
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpOwogCiAgICAg
ICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nQnkodm0sIGNvZGVCbG9jaywgb2xkU3Ry
dWN0dXJlLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHB1
dFNsb3QsICpzdHViSW5mbywgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKKyAg
ICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgb2xkU3RydWN0dXJlLCBpZGVudGlmaWVyLCBwdXRTbG90LCAqc3R1YkluZm8sIFB1dEJ5S2lu
ZDo6QnlJZCwgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKTsKICAgICB9KTsKIH0K
IApAQCAtOTI0LDE2ICs5MjQsMTUgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEoKICAgICAgICAg
QVNTRVJUX1VOVVNFRChhY2Nlc3NUeXBlLCBhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSk7CiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIGlkZW50aWZpZXIp
KQotICAgICAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgaWRlbnRpZmllciwgcHV0U2xvdCwgKnN0dWJJbmZvLCBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQpOworICAgICAgICAgICAgcmVwYXRjaFB1dEJ5
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIGlkZW50
aWZpZXIsIHB1dFNsb3QsICpzdHViSW5mbywgUHV0QnlLaW5kOjpCeUlkLCBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQpOwogICAgIH0pOwogfQogCi1zdGF0aWMgdm9pZCBwdXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBl
Y21hTW9kZSkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gc3Vi
c2NyaXB0LnRyeUdldEFzVWludDMySW5kZXgoKSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7CiAgICAgICAgIGlm
IChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CkBAIC05NDIsNyArOTQxLDggQEAgc3RhdGljIHZvaWQgcHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpT
VmFsdWUgc3UKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAgICAg
ICAgICAgaWYgKGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNl
dE91dE9mQm91bmRzKCk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGdsb2JhbE9iamVj
dCwgaSwgdmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtOTUxLDMyICs5NTEsMzAgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3UKICAgICAgICAgc2Nv
cGUucmVsZWFzZSgpOwogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChnbG9iYWxPYmplY3Qs
IGksIHZhbHVlLCBlY21hTW9kZS5pc1N0cmljdCgpKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0g
CisgICAgfQorCiAgICAgaWYgKHN1YnNjcmlwdC5pc051bWJlcigpKSB7Ci0gICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpKQotICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPnNldE91dE9mQm91bmRz
KCk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgaWYg
KGFycmF5UHJvZmlsZSkKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9mQm91
bmRzKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0
LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2Jq
ZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFD
YWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNjcmlwdCkg
fHwgYnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSAhPSBwcm9wZXJ0eSkpCi0gICAgICAgIGJ5VmFs
SW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0KCkpOwogICAg
IGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3Qp
OwogfQogCi1zdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUg
dmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkKK3N0YXRpYyB2
b2lkIGRpcmVjdFB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF5YmVJbmRleCA9IHN1YnNj
cmlwdC50cnlHZXRBc1VpbnQzMkluZGV4KCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpbmRleCA9ICptYXliZUluZGV4OwogCiAg
ICAgICAgIHN3aXRjaCAoYmFzZU9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTk4OCw3ICs5
ODYsOCBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
eVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIGlm
IChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJv
dW5kcygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTAwMiwxNSArMTAw
MSwxMSBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgSgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwYXJzZUluZGV4KHByb3BlcnR5KSkgewotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0
aCA9IHRydWU7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgYmFzZU9iamVjdC0+
cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJ
bmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChi
eVZhbEluZm8tPnN0dWJJbmZvICYmICghQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJ
ZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgIT0g
cHJvcGVydHkpKQotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7Ci0KICAg
ICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwg
ZWNtYU1vZGUuaXNTdHJpY3QoKSk7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRo
UmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBzbG90
KTsKQEAgLTEwMjMsMjI2ICsxMDE4LDIwNiBAQCBlbnVtIGNsYXNzIE9wdGltaXphdGlvblJlc3Vs
dCB7CiAgICAgR2l2ZVVwLAogfTsKIAotc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRC
eVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUg
c3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXRCeVZhbE9wdGltaXplKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBFQ01BTW9kZSBlY21hTW9kZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKLQotICAgIC8vIFNlZSBpZiBpdCdzIHdv
cnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKLQogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNDb3B5T25Xcml0
ZShiYXNlVmFsdWUuZ2V0T2JqZWN0KCktPmluZGV4aW5nTW9kZSgpKSkKLSAgICAgICAgcmV0dXJu
IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwotCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0KLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgICAgICBBU1NFUlQoIWJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhzdHJ1
Y3R1cmUpKSB7Ci0gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgotICAgICAgICAg
ICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2Rl
KSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
ICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZVB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CisgICAgICAgIGlmICghaXNDb3B5T25Xcml0ZShiYXNlT2JqZWN0LT5pbmRleGluZ01vZGUoKSkg
JiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocHJvZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXBhdGNoQXJy
YXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
ICpzdHViSW5mbywgUHV0S2luZDo6Tm90RGlyZWN0LCBlY21hTW9kZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhh
dmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2
ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAh
PSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSkt
PnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybygpKQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgfQorICAgICAgICBpZiAoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CisgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5
KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CisgICAg
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBlY21hTW9kZS5pc1N0
cmljdCgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpICYmIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmll
ckNlbGwoc3Vic2NyaXB0KSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKLSAgICAg
ICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRl
Y29kZUluZGV4KDApKTsKLSAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSk7Ci0gICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQudWlkKCkgPT0gcHJvcGVydHlOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWw+
KHZtLCBjb2RlQmxvY2ssIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgUHV0S2luZDo6Tm90RGly
ZWN0LCBieVZhbEluZm8tPmNhY2hlZElkKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0
aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBw
cm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVz
dWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAg
ICAgICAgICAgICBieVZhbEluZm8tPnNlZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
eVZhbEluZm8tPmNhY2hlZElkID0gQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUNlbGwo
c3Vic2NyaXB0LmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVz
dWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpTZWVuT25jZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLCBzdWJzY3JpcHQu
YXNDZWxsKCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9u
U2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQu
YXNDZWxsKCkpOworICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5n
Qnkodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVwYXRjaFB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN0
cnVjdHVyZSwgaWRlbnRpZmllciwgc2xvdCwgKnN0dWJJbmZvLCBQdXRCeUtpbmQ6OkJ5VmFsLCBQ
dXRLaW5kOjpOb3REaXJlY3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0
aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0ICE9IE9wdGlt
aXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBh
dGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UK
LSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNlcyB3aGVy
ZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmplY3RzLCB0aGlz
IGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2Vy
dmUKLSAgICAgICAgLy8gdGhhdCB0aGUgcHV0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuIFdl
IGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcmVzdWx0IGlz
IEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwKQot
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZl
VXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsIHZhbHVlLCBwcm9maWxlLCBlY21hTW9kZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIEVDTUFNb2RlIGVjbWFNb2RlKSkKK0pTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFycmF5UHJvZmlsZSogcHJvZmlsZSkpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBPcHRpbWl6YXRpb25SZXN1bHQgcmVzdWx0ID0gdHJ5
UHV0QnlWYWxPcHRpbWl6ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBiYXNl
VmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5f
QUREUkVTUykpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAg
aWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewotICAgICAgICAvLyBE
b24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOwotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAg
ICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmlj
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMpOwotICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5VmFsKGds
b2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8sIGVjbWFN
b2RlKSk7CisKKyAgICBwdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmls
ZSwgRUNNQU1vZGU6OnN0cmljdCgpKTsKIH0KIAotc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0
cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIG9iamVj
dCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUpKQogewotICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAg
Ly8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCi0gICAgT3B0aW1pemF0aW9u
UmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1p
emVkOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
VmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRT
dWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKIAorICAgIHB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHN0dWJJbmZvLCBwcm9maWxl
LCBFQ01BTW9kZTo6c2xvcHB5KCkpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNW
YWx1ZSB2YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUsIEVDTUFNb2RlIGVjbWFNb2RlKQorewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRl
Y29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7Ci0gICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKIAot
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKLSAg
ICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcoc3RydWN0dXJlKSkgewotICAgICAgICAg
ICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAg
IGlmIChqaXRBcnJheU1vZGVQZXJtaXRzUHV0RGlyZWN0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2Rl
ICE9IGJ5VmFsSW5mby0+YXJyYXlNb2RlKSB7CisgICAgaWYgKCFpc0NvcHlPbldyaXRlKGJhc2VP
YmplY3QtPmluZGV4aW5nTW9kZSgpKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAg
ICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdHZW5lcmljKHZtLCBjb2RlQmxvY2ssIHN0
cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlKSB7CiAgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihs
b2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKLQotICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZURpcmVjdFB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOwotICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOworICAgICAgICAgICAgICAgIHByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJl
KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgKnN0dWJJbmZvLCBQdXRL
aW5kOjpEaXJlY3QsIGVjbWFNb2RlKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICAvLyBJ
ZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNl
cHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KLSAg
ICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQotICAgICAgICAg
ICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7Ci0gICAg
fSBlbHNlIGlmIChDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxs
KHN1YnNjcmlwdCkpIHsKKyAgICBpZiAoQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJ
ZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJv
cGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXAp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBp
ZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewot
ICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwotICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsK
LSAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAo
YnlWYWxJbmZvLT5jYWNoZWRJZC51aWQoKSA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3BQdXRCeVZhbERpcmVj
dD4odm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBQdXRLaW5kOjpEaXJl
Y3QsIGJ5VmFsSW5mby0+Y2FjaGVkSWQpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRp
b25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTZWVtIGxpa2UgYSBnZW5lcmljIHBy
b3BlcnR5IGFjY2VzcyBzaXRlLgotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJ5
VmFsSW5mby0+Y2FjaGVkSWQgPSBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChz
dWJzY3JpcHQuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OlNlZW5PbmNlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHN1YnNjcmlwdC5h
c0NlbGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7CisgICAg
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGVjbWFNb2RlLmlzU3RyaWN0
KCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CisKKyAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1
dCh2bSwgYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0
V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworCisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOworCisgICAgICAgICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tQ2VsbChzdWJzY3JpcHQuYXNDZWxsKCkpOworICAgICAgICAgICAg
aWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmdCeSh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hQdXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIsIHNsb3QsICpzdHVi
SW5mbywgUHV0QnlLaW5kOjpCeVZhbCwgUHV0S2luZDo6RGlyZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0g
T3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb3B0aW1pemF0aW9uUmVzdWx0ICE9IE9w
dGltaXphdGlvblJlc3VsdDo6U2Vlbk9uY2UpIHsKLSAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93
IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUg
d2UKLSAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNlcyB3
aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZwotICAgICAgICAvLyBvYmplY3RzLCB0
aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9i
c2VydmUKLSAgICAgICAgLy8gdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMu
IFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcmVzdWx0
IGlzIEdpdmVVcC4KLSAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEw
KQotICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpH
aXZlVXA7Ci0gICAgfQorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBl
Y21hTW9kZSkpOwogCi0gICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0KIAotSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUsIHZvaWQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBFQ01BTW9kZSBlY21hTW9kZSkpCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwogICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgIE9wdGltaXphdGlvblJlc3VsdCByZXN1bHQgPSB0cnlEaXJl
Y3RQdXRCeVZhbE9wdGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIG9i
amVjdCwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBp
ZiAocmVzdWx0ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7Ci0gICAgICAgIC8vIERv
bid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0
aCA9IHRydWU7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAg
ICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdl
bmVyaWM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsR2VuZXJpYyk7Ci0gICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBkaXJlY3RQdXRCeVZhbChnbG9iYWxPYmplY3QsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwg
YnlWYWxJbmZvLCBlY21hTW9kZSkpOworICAgIGRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUsIHN0dWJJbmZvLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOwogfQogCi1KU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lkLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUpKQorSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9m
aWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9w
ZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAg
ICAKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
VmFsdWUpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRT
dWJzY3JpcHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKIAotICAgIHB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlLCBieVZhbEluZm8sIGVjbWFNb2RlKTsKKyAgICBkaXJlY3RQdXRCeVZhbE9wdGltaXpl
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIHZhbHVlLCBzdHViSW5mbywgcHJvZmlsZSwgRUNNQU1vZGU6OnNsb3BweSgpKTsKIH0KIAor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYywg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBBcnJheVByb2Zp
bGUqIHByb2ZpbGUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi1K
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgRUNNQU1vZGUgZWNtYU1vZGUp
KQorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFs
dWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJz
Y3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgcHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFN
b2RlOjpzdHJpY3QoKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxlKiBwcm9maWxlKSkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOworCisgICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgdmFsdWUsIHByb2ZpbGUsIEVDTUFNb2RlOjpzbG9wcHkoKSk7Cit9CisKK0pTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMsIHZv
aWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQXJyYXlQcm9maWxl
KiBwcm9maWxlKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKwogICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwog
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQp
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgZGlyZWN0UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBi
eVZhbEluZm8sIGVjbWFNb2RlKTsKKworICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVl
OworCisgICAgZGlyZWN0UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUp
LCBzdWJzY3JpcHQsIHZhbHVlLCBwcm9maWxlLCBFQ01BTW9kZTo6c3RyaWN0KCkpOworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworCisgICAg
c3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBkaXJlY3RQdXRCeVZhbChnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIHN1YnNjcmlwdCwgdmFsdWUsIHByb2ZpbGUs
IEVDTUFNb2RlOjpzbG9wcHkoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJyYW5kKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggMjU4NGU5OTVlNDY2ZGU5NGE5YjIw
MzI3YjBlYzQ4ODFkNWYxOTk5OC4uZWZiZDg4NzM1NDJmYzNmNGJlODNlMDZiZTA2MjU3YmZjMjlj
YzQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTIw
MywxMCArMjAzLDE1IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRHZW5lcmljLCB2b2lkLCAoSlNHbG9iYWxPYmplCiAKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgQnlWYWxJbmZvKiwgUHJpdmF0ZUZpZWxkUHV0S2luZCkpOwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRQcml2YXRlTmFtZUdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5
VmFsSW5mbyosIFByaXZhdGVGaWVsZFB1dEtpbmQpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwg
RUNNQU1vZGUpKTsKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKiwgRUNNQU1vZGUpKTsKLUpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB2b2lkLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qLCBFQ01BTW9kZSkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMsIHZvaWQsIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5m
byosIEVDTUFNb2RlKSk7CisKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8q
LCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvKiwg
QXJyYXlQcm9maWxlKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIEFycmF5UHJvZmlsZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYywgdm9pZCwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBBcnJheVByb2ZpbGUqKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqLCBFQ01BTW9kZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiwgSlNHbG9iYWxP
YmplY3QqLCBDYWxsTGlua0luZm8qKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDNkMWQ4NGZjODIwMmJmODg5YmRmMjBlYTMzOGRm
OGE5MTEwOTA2M2IuLjU2OTQ5MzA1YTM1NWZhOTFlNWEzNWFiZjE1MjhkNzc1MTNkMGFlNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBA
IC00MzgsMTc4ICs0MzgsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1f
Ynl0ZWNvZGVJbmRleCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29u
c3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFu
dCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwg
cmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYg
KCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgYXV0byBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRl
QWRkcmVzcygmYnlWYWxJbmZvLT5tX25vdEluZGV4SnVtcFRhcmdldCksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKLSAgICAgICAgICAgIGlzSW50MzIubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdU
MSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMy
VG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0gICAgfQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKIAotICAgIFBhdGNoYWJsZUp1bXAgYmFk
VHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
c2hvdWxkIGRvIHRoaXMgaW5saW5lPwotICAgIGxvYWQ4KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwot
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAg
IEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1
dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlT
dG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBy
ZWdUNCk7CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZh
bEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUs
IGRvbmUsIGRvbmUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhp
bmdTaGFwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAg
ICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlWYWxJbmZvKSB7Ci0gICAg
ICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRk
cmVzcygmYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOwotICAgICAgICAgICAgaXNDb3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihp
bmRleGluZ1NoYXBlKSk7Ci0KLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVs
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN3aXRj
aCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0gICAgICAgIHN0b3JlNjQocmVn
VDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElm
Tm90SW50MzIocmVnVDMpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMywgZnBS
ZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5r
KHRoaXMpOwotICAgICAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgcmVnVDMpOwotICAgICAg
ICBtb3ZlNjRUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOYU4oZnBSZWdUMCkpOwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAg
ICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToK
LSAgICAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdo
dCkpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2Zp
bGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1KSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKLXsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgCi0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpIHsKLSAgICAgICAgaWYgKGJ5VmFsSW5mbykgewotICAgICAgICAgICAgYXV0byBpc0NvcnJl
Y3RUeXBlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdl
U2hhcGUpKTsKLSAgICAgICAgICAgIGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8t
Pm1fYmFkVHlwZUp1bXBUYXJnZXQpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAg
ICBpc0NvcnJlY3RUeXBlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VT
aGFwZSkpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwotCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAg
IGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwotICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0g
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVS
ZXN1bHQsIHRoaXMpOwotCi0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAg
c3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIGp1bXAoKS5saW5r
VG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX3B1dEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVuZC5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBz
bG93Q2FzZXM7CisgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0
ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgorICAgIC8vIEZJWE1FOiBVc2UgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciBpbiBCYXNlbGluZSBlZmZlY3RpdmVseSB0byByZWR1Y2UgY29kZSBz
aXplLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkz
OTUKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2MiwxMiArNTE3LDE1IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0g
WyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsK
KyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAog
ICAgIGlmIChpc0RpcmVjdCkKQEAgLTY3NSw0OCArNTMzLDQwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTCiAgICAgZWxzZQogICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeVZhbD4oKSk7CiAKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKyAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8sIFRydXN0ZWRJbW0zMihlY21h
TW9kZS52YWx1ZSgpKSk7CisgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBw
YXRoIGFuZCBub3QgY2xvYmJlcmVkLgorICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNE
aXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5m
bygpLCByZWdUMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJU
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIwOworICAg
IC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJl
ZC4KKyAgICAvLyBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICAvLyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgLy8gY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIC8vIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
UFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9HUFIgPSBh
cmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50
R1BSNTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihieVZhbEluZm8pLCBieVZhbEluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGVjbWFN
b2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCiAgICAgQ2FsbCBjYWxsOworICAgIGF1dG8gb3BlcmF0aW9uID0g
aXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwogICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBieVZhbEluZm8tPm1f
c2xvd09wZXJhdGlvbiA9IGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247CiAgICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2Fs
bDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKQEAgLTczMSwyNCArNTgxLDIzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0CiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSMDsKLSAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQ
UiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Ci0K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieVZhbEluZm9H
UFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFy
Z3VtZW50R1BSNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAorICAgIGppdC5zdG9yZTMyKGJ5dGVjb2Rl
T2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQ
Uik7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxP
cHRpbWl6ZSk+KGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlUFIs
IGJ5VmFsSW5mb0dQUiwgZWNtYU1vZGVHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oZ2xvYmFsT2JqZWN0R1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsK
ICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGppdC5mYXJKdW1wKEFkZHJl
c3MoYXJndW1lbnRHUFI0LCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3Bl
cmF0aW9uUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQWRkcmVzcyhhcmd1bWVudEdQUjQs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0
clRhZyk7CiAgICAgZWxzZQogICAgICAgICBqaXQucmV0KCk7CiAKQEAgLTgxMCwxMyArNjU5LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlUFIgPSBhcmd1bWVudEdQUjM7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5VmFsSW5mb0dQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHB1dEtpbmRHUFIgPSBhcmd1bWVudEdQUjU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUdQUik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZVBSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYnlWYWxJbmZvKSwgYnlWYWxJbmZvR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihw
dXRLaW5kLnZhbHVlKCkpLCBwdXRLaW5kR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKQEAgLTg1MiwxNCArNzAxLDE0IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBh
cmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gYXJndW1lbnRHUFIx
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZVBSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieVZh
bEluZm9HUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBwdXRLaW5kR1BS
ID0gYXJndW1lbnRHUFI1OwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvblB1dFByaXZhdGVOYW1lT3B0aW1pemUpPihnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZVBSLCBieVZhbEluZm9HUFIsIHB1dEtpbmRHUFIpOworICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25QdXRQcml2YXRlTmFtZU9wdGltaXplKT4o
Z2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGJ5VmFsSW5m
b0dQUiwgcHV0S2luZEdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKIAog
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQpAQCAtMzI5
MSw4MiArMzE0MCw2IEBAIHZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soUmVnaXN0
ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIENhY2hlYWJsCiAgICAgfQogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIAotICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRzTGlu
a0ZvcldyaXRlQmFycmllciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAg
ICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChi
eXRlY29kZSwgYmFkVHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
RG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3Vv
dXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUsIG51bGxwdHIpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSB0
cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBu
dWxscHRyKTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5
cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChpc0lu
dCh0eXBlKSkKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJy
YXkgaW4gSUMKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgQmlnSW50NjRBcnJheSAvIEJpZ1Vp
bnQ2NEFycmF5IG5ldmVyIGNvbWVzIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBBU1NFUlQoaXNG
bG9hdCh0eXBlKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIG51bGxwdHIsIHR5cGUpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlW
YWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
YnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVy
KSB7Ci0gICAgICAgIEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fZmFyQ2FsbHMubGFzdCgpLmNh
bGxlZS5leGVjdXRhYmxlQWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYXJDYWxs
cy5sYXN0KCkuZnJvbSwgbV9mYXJDYWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAg
ICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgp
KTsKLSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1
dF9ieV92YWxfZGlyZWN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSk7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gaXNEaXJlY3Qg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVy
aWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5
VmFsSW5mby0+bV9iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVz
c1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwot
ICAgIH0KLX0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25zdW1lZCBmcm9tIGFub3RoZXIg
dHJhbnNsYXRpb24gdW5pdCAoSklUT3BlcmF0aW9ucy5jcHApLAotLy8gc28gd2UgbGlzdCBvZmYg
dGhlIHR3byBleHBlY3RlZCBzcGVjaWFsaXphdGlvbnMgaW4gYWR2YW5jZS4KLXRlbXBsYXRlIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7
Ci10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGly
ZWN0Pihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNz
UHRyLCBKSVRBcnJheU1vZGUpOwotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRQcml2YXRl
TmFtZVdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CkBAIC0zNDA4LDIy
MyArMzE4MSw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BCiAgICAgfQogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgQVNTRVJUKChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCAmJiBPcDo6b3Bjb2RlSUQgPT0g
b3BfcHV0X2J5X3ZhbF9kaXJlY3QpIHx8IChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCAm
JiBPcDo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbCkpOwotICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQ
dXRCeVZhbFdpdGhDYWNoZWRJZChieXRlY29kZSwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25l
Q2FzZXMsIHNsb3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29k
ZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29k
ZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmRvbmVUYXJnZXQpOwotICAgIGlmICgh
bV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4
Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX25lYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNp
dGUuY2FsbGVlKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBj
YWxsU2l0ZS5jYWxsZWUpOwotICAgIH0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDog
bV9mYXJDYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQotICAgICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwotICAgIH0K
LSAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVyKTsKLQotICAgIGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFz
ZWxpbmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0KSA/ICJf
ZGlyZWN0IiA6ICIiLCBwcm9wZXJ0eU5hbWUudWlkKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwot
ICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5m
by0+bV9ub3RJbmRleEp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAg
IGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3Qg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVy
aWM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5
VmFsSW5mby0+bV9ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJl
c3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1
cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ocHV0S2luZCA9PSBQdXRL
aW5kOjpEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25Q
dXRCeVZhbEdlbmVyaWMpKTsKLSAgICB9Ci19Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29u
c3VtZWQgZnJvbSBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgKEpJVE9wZXJhdGlvbnMuY3BwKSwK
LS8vIHNvIHdlIGxpc3Qgb2ZmIHRoZSB0d28gZXhwZWN0ZWQgc3BlY2lhbGl6YXRpb25zIGluIGFk
dmFuY2UuCi10ZW1wbGF0ZSB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZDxPcFB1dEJ5VmFsPihCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBQdXRLaW5kLCBD
YWNoZWFibGVJZGVudGlmaWVyKTsKLXRlbXBsYXRlIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkPE9wUHV0QnlWYWxEaXJlY3Q+KEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIFB1dEtpbmQsIENhY2hlYWJsZUlkZW50aWZpZXIpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKE9w
IGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
VHlwZWRBcnJheVR5cGUgdHlwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3Bl
cnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBS
ZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRj
aDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVn
aXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0g
cmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVy
SUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLQotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGlmIChieVZhbEluZm8pIHsKLSAgICAg
ICAgICAgIGF1dG8gaXNDb3JyZWN0VHlwZSA9IGJyYW5jaDMyKEVxdWFsLCBlYXJseVNjcmF0Y2gs
IFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICAgICAgICAg
IGZhckp1bXAoQWJzb2x1dGVBZGRyZXNzKCZieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgICAgICBpc0NvcnJlY3RUeXBlLmxpbmso
dGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRB
cnJheVR5cGUodHlwZSkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlw
ZWRBcnJheVR5cGUodHlwZSkpKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgbGF0ZVNjcmF0Y2gyKTsKLSAgICBKdW1wIGlu
Qm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBsYXRlU2NyYXRjaDIpOwotICAgIGVt
aXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoanVtcCgpKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlT
Y3JhdGNoKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIoZWFybHlTY3Jh
dGNoKSk7Ci0jZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3Jh
dGNoKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIobGF0ZVNjcmF0Y2gp
KTsKLSNlbmRpZgotICAgIAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJh
c2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4
cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwot
ICAgIGNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNj
cmF0Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgaWYg
KGlzQ2xhbXBlZCh0eXBlKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZElt
bTMyKDB4ZmYpKTsKLSAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwg
ZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4b3IzMihlYXJseVNj
cmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAoKTsKLSAg
ICAgICAgdG9vQmlnLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZmYp
LCBlYXJseVNjcmF0Y2gpOwotICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAgICAgIGlu
Qm91bmRzLmxpbmsodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUo
dHlwZSkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJ
bmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgMjoKLSAgICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRl
U2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
NDoKLSAgICAgICAgc3RvcmUzMihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBUeXBlZEFycmF5VHlwZSB0eXBlKQotewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
LQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAg
UmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNo
ID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lz
dGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklE
IGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdU
MTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0KLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBpZiAoYnlW
YWxJbmZvKSB7Ci0gICAgICAgICAgICBhdXRvIGlzQ29ycmVjdFR5cGUgPSBicmFuY2gzMihFcXVh
bCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSk7Ci0gICAgICAgICAgICBmYXJKdW1wKEFic29sdXRlQWRkcmVzcygmYnlWYWxJbmZvLT5tX2Jh
ZFR5cGVKdW1wVGFyZ2V0KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwotICAgICAgICAgICAgaXND
b3JyZWN0VHlwZS5saW5rKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1t
MzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVk
SW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVz
cyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNo
Mik7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNj
cmF0Y2gyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9m
aWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZO
b3RJbnQzMihlYXJseVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2Ny
YXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNl
LmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJs
eVNjcmF0Y2gpKTsKLSAgICBhZGQ2NChudW1iZXJUYWdSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsK
LSAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwotICAgIHJlYWR5Lmxp
bmsodGhpcyk7Ci0jZWxzZQotICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlT
Y3JhdGNoKTsKLSAgICBKdW1wIGRvdWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGxhdGVTY3Jh
dGNoKTsKLSAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwot
ICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgIG1vdmVJbnRzVG9Eb3VibGUoZWFybHlTY3Jh
dGNoLCBsYXRlU2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgcmVhZHkubGluayh0aGlzKTsKLSNlbmRp
ZgotICAgIAotICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4g
Z2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKLSAgICAvLyBwYXRoIGV4cGVjdHMgdGhl
IGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VD
b25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxh
dGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7Ci0gICAgCi0gICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgewotICAgIGNhc2UgNDoKLSAgICAgICAgY29udmVydERvdWJsZVRvRmxv
YXQoZnBSZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUlu
ZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgODoKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVT
Y3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2Vz
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAppbmRleCBlODI2OWZkMWUxOTlmMTUyNDg0ZWI0NGRkZWYyYWFkMTc3ODIzMmZhLi44YmExMGU0
M2VhNmU1NThhNTdiZmZjZWJhOTNlNGZkYzA5ZWIyODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ2NiwxNTEg
KzQ2NiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKLSAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMSk7Ci0gICAgCi0gICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIC8vIEZJWE1FOiBN
YXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgbG9hZDgoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoQ29weU9uV3Jp
dGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEp
OwotICAgIAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAg
IAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZv
KGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJv
ZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdTaGFwZSkKLXsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oYnlWYWxJbmZvKTsKLSAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoQ29udGlndW91c1NoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBvdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIAotICAgIExhYmVsIHN0b3JlUmVzdWx0
ID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzd2l0
Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAgICBzdG9yZTMyKHJl
Z1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb250aWd1b3VzU2hh
cGU6Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBlbWl0TG9h
ZChiYXNlLCByZWdUMiwgcmVnVDMpOwotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91Ymxl
U2hhcGU6IHsKLSAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsK
LSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICBK
dW1wIHJlYWR5ID0ganVtcCgpOwotICAgICAgICBub3RJbnQubGluayh0aGlzKTsKLSAgICAgICAg
bW92ZUludHNUb0RvdWJsZShyZWdUMCwgcmVnVDEsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTmFOKGZwUmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlz
KTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwg
VGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRk
cmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVt
cCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBP
cD4KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVn
VDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwg
cmVnVDQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDYpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCi0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShieVZhbEluZm8pOwotICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJh
eVN0b3JhZ2VTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCisg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKKyAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIEp1bXAgZW1wdHkg
PSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAK
LSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7IC8vIHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1Qx
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8g
dGFnCi0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3cs
IHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwotICAgIAotICAgIGVuZC5saW5rKHRoaXMpOwotICAgIAotICAgIGVtaXRXcml0ZUJh
cnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4g
c2xvd0Nhc2VzOworICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KKyAgICAvLyBGSVhNRTogVXNlIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgaW4gQmFzZWxpbmUgZWZmZWN0aXZlbHkgdG8gcmVkdWNlIGNvZGUg
c2l6ZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5
Mzk1CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTYyMCwxMiArNDk1LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAg
ICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAg
IGVjbWFNb2RlID0gSklUOjplY21hTW9kZShieXRlY29kZSk7CisgICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBA
IC02MzMsMjEgKzUxMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVsc2UKICAg
ICAgICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOwogCi0gICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0gICAgCisgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKKwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAorCisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisKICAgICAvLyBUaGUgcmVnaXN0ZXIgc2Vs
ZWN0aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJN
LgogICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgot
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMSk7Ci0gICAgZW1pdExvYWQocHJvcGVydHks
IHJlZ1QzLCByZWdUMCk7CisgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVy
dHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGJ5VmFsSW5mbywgVHJ1c3Rl
ZEltbTMyKGVjbWFNb2RlLnZhbHVlKCkpKTsKIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRk
cmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVn
cyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUNSwgcmVnVDQpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CisKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCAzN2E4MGIyOTU3NzIxMGYzNWUw
NmQ4MWJhMTM0NWY2OTc4MDA5NjQ0Li5lNjNjOTliZTZhYmY3ZWI3ODlkY2E2YWYzOWY1MDkwMmZh
ZDM4NDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTU2OCw1MyAr
NTY4LDk0IEBAIHZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTCiAgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKIH0K
IAotc3RhdGljIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1
dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKSAtPiBkZWNsdHlwZSgmb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90
ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dp
dGNoIChwdXRLaW5kKSB7Ci0gICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdDsKLSAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAg
ICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkg
eworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkg
eworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5p
c1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAg
ICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAgICAgLy8gTWFrZSB3aW4gcG9y
dCBjb21waWxlciBoYXBweQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBhdXRvIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkgLT4gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKK3N0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlL
aW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGRTZXQ6Ci0gICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsK
KyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAg
ICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkg
eworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIC8vIE1h
a2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtp
bmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpAQCAtNjgyLDgg
KzcyMyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrCiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0
QnlJZFNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFz
ZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJs
b2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC04MTcsMTIgKzg1OCwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
awogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQ
dXRCeUlkQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5
QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFz
ZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAKICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8u
YWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3Ry
aWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9w
ZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJh
dGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVw
bGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVw
bGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwogCkBAIC04MzUsMTIgKzg3NiwxMDUgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVw
T25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCByZXBhdGNoUHV0QnlJRChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAo
dHJ5Q2FjaGVQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVw
T25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAg
IGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9s
ZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRL
aW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0
QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMy
KCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAg
ICB7CisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAg
ICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVk
VmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVk
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdV
aW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6Cisg
ICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5n
VHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5n
U2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hh
cGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJh
eVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCk7CisgICAgICAgIHJlc3Vs
dCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJl
cGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIo
KSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZp
cmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2Nr
LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJh
eVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8s
IHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYykpOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCkBA
IC05ODYsNyArMTEyMCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnko
CiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzU2LDI4
ICsxODkwLDU1IEBAIHZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luCiAgICAgfQogfQogCi12b2lkIHJl
c2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQogewotICAgIHVzaW5nIEZ1bmN0aW9uVHlw
ZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAg
IEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5j
dGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Ci0gICAgRnVuY3Rpb25UeXBlIG9wdGltaXplZEZ1bmN0aW9uOwotICAg
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwot
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRl
Y2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOworICAgICAgICBG
dW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rp
b25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewor
ICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29k
ZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVy
aWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICB9CiAKICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIHJlc2V0RGVsQnkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5k
IGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGMxOWYwMmQ0ZDQwMTk1
ODFlNWE5NGFiZDYzNzNjMGFjMzYyOWQ4ZTYuLmVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhj
ZjY4ZDc5YzdkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC00Myw2ICs0
MywxMSBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgUHJpdmF0ZU5hbWVCeUlkLAogfTsK
IAorZW51bSBjbGFzcyBQdXRCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCit9OworCiBl
bnVtIGNsYXNzIERlbEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbApAQCAtNTYsNyArNjEs
OCBAQCBlbnVtIGNsYXNzIEluQnlLaW5kIHsKIAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwg
U3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoUHV0QnlJ
RChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hl
YWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1
dEtpbmQpOwogdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwogdm9pZCBy
ZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVh
YmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNH
bG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIs
IGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNjksNyArNzUsNyBAQCB2
b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtD
YWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7CiB2b2lk
IHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwot
dm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQg
cmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7CiB2
b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQp
Owogdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2lu
ZCk7CiB2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuaAppbmRleCA3ZWVhNzU4NzBlN2IxNTI5NjkxMGQ1ZTBhODcxNTVhYzVjNDJkZDNiLi43
MmU3YjA3OTE0ZWVkN2Y2Nzc3OTkwMWZiYmEzMDZiYzQ3MTJjNTk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmgKQEAgLTMyLDcgKzMy
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBUaGUgZm9sbG93aW5nIGlzIGEgc2V0IG9mIGFs
aWFzIGZvciB0aGUgb3Bjb2RlIG5hbWVzLiBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGVy
ZSBpcyBjb2RlIChlLmcuIGluIEdldEJ5U3RhdHVzLmNwcCBhbmQgUHV0QnlJZFN0YXR1cy5jcHAp
CisvLyBiZWNhdXNlIHRoZXJlIGlzIGNvZGUgKGUuZy4gaW4gR2V0QnlTdGF0dXMuY3BwIGFuZCBQ
dXRCeVN0YXR1cy5jcHApCiAvLyB3aGljaCByZWZlcnMgdG8gdGhlIG9wY29kZXMgZXhwZWN0aW5n
IHRoZW0gdG8gYmUgcHJlZml4ZWQgd2l0aCAibGxpbnRfIi4KIC8vIEluIHRoZSBDTG9vcCBpbXBs
ZW1lbnRhdGlvbiwgdGhlIDIgYXJlIGVxdWl2YWxlbnQuIEhlbmNlLCB3ZSBzZXQgdXAgdGhpcwog
Ly8gYWxpYXMgaGVyZS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>